如标题所述简单。基本上,在这个例子中,我们能不能得到一个无效的状态:
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/