Swift 中的线程安全

Posted

技术标签:

【中文标题】Swift 中的线程安全【英文标题】:Thread safety in Swift 【发布时间】:2014-08-04 13:53:16 【问题描述】:

我正在开发一个项目来处理需要在多个线程之间遵守的状态机更改,但偶然发现它们默认情况下是非原子的。 有没有办法在 Xcode6-Beta4 时使 Swift 属性线程安全或原子? 提前致谢。

【问题讨论】:

见这里:***.com/questions/24157834/are-swift-variables-atomic 我确实读过那篇文章,但想确认一下,因为写的答案是以前的 Beta 版。谢谢 由于 Apple 目前还没有发布任何“真正的”文档,因此整个 Swift 范式将被视为测试版。不过,您现在可以使用objc_sync_enter(self) //synchronized code objc_sync_exit(self) 同步您的代码。 原子属性实际上不足以使代码真正成为线程安全的,所以如果 Apple 添加原子属性,我会感到惊讶。 【参考方案1】:

我认为Alexander W 的想法是正确的,但我建议将self 作为一般规则进行同步。也许我在这里发布的建议可能会有所帮助:

https://***.com/a/28976644/2317256

【讨论】:

【参考方案2】:

您可以使用 dispatch_semaphore_t、NSLock 或 pthread_mutex_t 或类似的东西在线程安全属性上实现您的 Getter Setter。

目前,没有定义某些行为的属性,例如 Obj-C 的原子/非原子 quialifers

【讨论】:

以上是关于Swift 中的线程安全的主要内容,如果未能解决你的问题,请参考以下文章

Swift COW 线程安全

swift实现线程安全的栈和队列

Swift - 分派到主队列是不是足以使 var 线程安全?

如何使 Swift 类单例实例线程安全?

将 Swift 调用同步到基于 C 的线程不安全库

swift 线程安全访问数组的开始。