在 Swift 5.5 中,引入了新的 Sendable 协议详解

6 min read

Swift 5.5 中引入了新的协议叫做 Sendable,它用于声明支持并发安全的类型。它的定义如下:

public protocol Sendable

Sendable 协议只是一个标记协议,它没有任何要求,只需简单声明一个类型是并发安全的即可。一个遵守 Sendable 协议的类型可以安全地在不同的线程间传递,或者用于异步任务的并发访问。

在 Swift 5.5 中,为了更好地支持并发编程,增加了一个新特性叫做 Actor,它提供了一种结构化的、易于维护的方式来管理共享状态和协调并发访问。使用 Actor 编写的类型自动遵守 Sendable 协议,因为 Actor 的设计已经考虑了并发访问的安全性。

除了 Actor,还有一些其他类型自动遵守 Sendable 协议:

  • 所有的值类型,如结构体和枚举
  • 函数类型,包括全局函数、嵌套函数和闭包
  • 对于引用类型,只有在其属性和方法都是线程安全的情况下才能遵守 Sendable 协议

需要注意的是,虽然一个类型可能是并发安全的,但是它也可以随时被其他线程修改。因此,在并发编程中,仍然需要使用锁或其他机制来保护共享状态。Sendable 协议只是一个声明一个类型是并发安全的方式,而不是保证其线程安全的方式。

总之,Swift 5.5 中引入的 Sendable 协议是一个用于声明并发安全的类型的标记协议,它可以用于在不同的线程间传递和并发访问。当我们使用 Actor 编写类型时,它自动遵守 Sendable 协议,因为 Actor 的设计已经考虑了并发访问的安全性。除此之外,其他值类型和函数类型也自动遵守 Sendable 协议,但对于引用类型仍需特别注意线程安全性。