go 初学者,在看《 GO 高级编程》,对于下面这句话不是很理解,
https://chai2010.gitbooks.io/advanced-go-programming-book/content/ch1-basic/ch1-05-mem.html
“更糟糕的是,因为两个线程之间没有同步事件,setup 线程对 done 的写入操作甚至无法被 main 线程看到,main 函数有可能陷入死循环中。”
var a string
var done bool
func setup() {
a = "hello, world"
done = true
}
func main() {
go setup()
for !done {}
print(a)
}
在 main 的 for 循环里检查 done 的值,即使某一次检查恰好与 setup 设置 done 相冲突,在下次 for 的检查应该也能发现 done 被设为 true 了啊,为什么会说“ setup 线程对 done 的写入操作甚至无法被 main 线程看到”呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.