作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Swift 中的可变数组不是线程安全的,因此写访问需要同步。是不是所有的reads也需要如此?具体来说,以下线程在不使用锁、串行队列等的情况下是否安全(假设在这两种情况下其他线程可能会改变数组):
最佳答案
有关线程安全的确切细节应由语言指定。目前,Swift 没有这样的规范。甚至没有像“线程”这样的东西。因此,我们应该应用“最坏情况”(例如 C 的行为方式)并应用来自 GCD 和其他可在 Swift 中使用的 C API 的知识。
请注意,某些语言习语可能是线程安全的,只是因为语言和底层工具集本身会处理它,例如在语言构造需要时插入对适当内存屏障指令的调用,并在为它生成代码时插入对当前硬件的调用。 C 语言(和 C++)在这方面没有为我们做任何事情。
我们努力避免的是“数据竞赛”。当任何线程写入内存位置而任何其他线程在不使用显式同步原语的情况下从同一位置读取时,可能会发生数据竞争。并且,将“线程”视为我们在 Cocoa 中创建 NSThread 对象时的意思。
因此,您的方案是否是线程安全的问题很明确:“不,不是。”您需要的是某种形式的并发控制,例如使用专用的串行调度队列,您可以在其中执行对数组的访问(读取和写入),或者将锁与互斥锁(也称为“临界区”)结合使用。
关于arrays - Swift 可变数组线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28340527/
我是一名优秀的程序员,十分优秀!