当我看看golang内存模型文档(link)时,我发现了一个奇怪的行为。此文件说,下面的代码可能会发生g打印2,然后0.go lang中的同步不正确
var a, b int
func f() {
a = 1
b = 2
}
func g() {
print(b)
print(a)
}
func main() {
go f()
g()
}
这是唯一的例行问题吗?因为我很好奇,为什么变量'b'的值赋值会在'a'之前发生?即使'a'和'b'的值赋值会在不同的线程中发生(不在主线程中),是否必须确保'a'应该在它自己的线程中的'b'之前被赋值?(因为赋值' a'先来,'b'来的再来)任何人都可以清楚地告诉我这个问题吗?
据我所知:b的g值的可见度不是由f决定的。 _里面的f a先设定,然后b设定,而不是反过来。 – Volker