小编fly*_*ine的帖子

如何理解Go内存模型中的“同步错误”样本

我刚刚开始学习 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 不能保证看到写入完成?

谢谢

synchronization go

4
推荐指数
1
解决办法
449
查看次数

标签 统计

go ×1

synchronization ×1