gpt4 book ai didi

arrays - Swift 可变数组线程安全

转载 作者:可可西里 更新时间:2023-11-01 01:06:23 25 4
gpt4 key购买 nike

Swift 中的可变数组不是线程安全的,因此写访问需要同步。是不是所有的reads也需要如此?具体来说,以下线程在不使用锁、串行队列等的情况下是否安全(假设在这两种情况下其他线程可能会改变数组):

  1. 访问可变数组的计数属性
  2. 将数组传递给函数,或将其分配给变量(假设这两者都将复制数组,因为它是一个结构)

最佳答案

有关线程安全的确切细节应由语言指定。目前,Swift 没有这样的规范。甚至没有像“线程”这样的东西。因此,我们应该应用“最坏情况”(例如 C 的行为方式)并应用来自 GCD 和其他可在 Swift 中使用的 C API 的知识。

请注意,某些语言习语可能是线程安全的,只是因为语言和底层工具集本身会处理它,例如在语言构造需要时插入对适当内存屏障指令的调用,并在为它生成代码时插入对当前硬件的调用。 C 语言(和 C++)在这方面没有为我们做任何事情。

我们努力避免的是“数据竞赛”。当任何线程写入内存位置而任何其他线程在不使用显式同步原语的情况下从同一位置读取时,可能会发生数据竞争。并且,将“线程”视为我们在 Cocoa 中创建 NSThread 对象时的意思。

因此,您的方案是否是线程安全的问题很明确:“不,不是。”您需要的是某种形式的并发控制,例如使用专用的串行调度队列,您可以在其中执行对数组的访问(读取和写入),或者将锁与互斥锁(也称为“临界区”)结合使用。

关于arrays - Swift 可变数组线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28340527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com