正如标题所示,很简单。基本上,在这个例子中,我们是否可以获得无效状态:
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 有什么关系。多线程的本质如下。每当你说出这种形式的内容时:
if myBool {
print("Was set to true")
...你应该假设如果myBool
可以在另一个线程上设置,可以设置第一行和第二行之间。这可能会导致"Was set to true"
即使此刻正在打印false
,或者相反可能会导致它not即使此刻正在打印true
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)