我刚刚开始学习 golang,在阅读Go 内存模型时,我遇到了一个问题来理解它所说的“另一个不正确的习惯用法是忙着等待一个值”,
var a string
var done bool
func setup() {
a = "hello, world"
done = true
}
func main() {
go setup()
for !done {
}
print(a)
}
Run Code Online (Sandbox Code Playgroud)
它说:
“更糟糕的是,不能保证 main 会观察到对 done 的写入,因为两个线程之间没有同步事件。不能保证 main 中的循环完成。”
我知道在 setup() 中写入“a”和“done”的顺序不是确定性的,我的问题是:为什么 main 不能保证看到写入完成?
谢谢