如标题所述简单。基本上,在此示例中,我们能否获得无效状态:

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提供的锁定功能。

10-08 11:17