multithreading - 在 Swift 中设置和读取 Bool 原子操作吗?

标签 multithreading swift3 boolean

如标题所述简单。基本上,在这个例子中,我们能不能得到一个无效的状态:

var myBool = false

// Thread 1
while true {
    if randomEvent() {
        myBool = true
    }
}

// Thread 2
while true {
    if myBool {
        print("Was set to true")
    } else {
        print("Not set")
    }
}

这会因为 myBool 处于某种无效状态而崩溃吗?或者这“安全”吗?

最佳答案

经过 Swift Users 邮件列表的讨论,确认 Bool 值的读写在 Swift 中不是原子操作。此外,上面的代码可能会被编译器优化,因为 myBool 从未在线程 2 的上下文中设置,它可能会优化检查。在 Swift 中执行此操作的唯一有效方法是使用 GCD 正确编码,或使用操作系统提供的锁定功能。

关于multithreading - 在 Swift 中设置和读取 Bool 原子操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41639806/

相关文章:

multithreading - Masstransit rabbitMQ 在多线程上发布

c++ - 锁定映射和 vector 以防止从两个线程访问

java - 单例设计模式中的 Synchronized(MyClass.class){ } - 它有什么作用?

ios - Xcode8 无法将多个/单个 uibuttons 连接到 swift 文件中的单个 @IBAction

ios - "No Results"当没有人脸出现时(Swift)-简单

boolean - 如何在 Go 中打印 boolean 值?

java - 等待线程资源消耗

ios - 在动画完成之前调用 UIView 动画完成

ios - 无法使用 swift 3 在 firebase 中指定特定值的节点

c++ - 是否可以在 gcc 中关闭对 "and"/"or" boolean 运算符使用的支持?