如标题所述简单。基本上,在此示例中,我们能否获得无效状态:
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用户邮件列表中进行讨论后,已确认对Bool值的读取和写入不是Swift中的原子操作。此外,上面的代码可以由编译器优化,并且由于myBool
从未在线程2的上下文中设置,因此可以优化检查。在Swift中执行此操作的唯一有效方法是使用GCD正确编码,或使用OS提供的锁定功能。