内存 – golang中的原子操作是否建立了先发生关系?
我知道可以发生g打印2然后给出以下代码0.
var a,b uint32 func f() { a = 1 b = 2 } func g() { fmt.Println(b) fmt.Println(a) } func main() { go f() g() } 如果我将所有读写更改为原子操作怎么办?是否保证如果g先打印2,那么还会打印1? var a,b uint32 func f() { atomic.StoreUint32(&a,1) atomic.StoreUint32(&b,2) } func g() { fmt.Println(atomic.LoadUint32(&b)) fmt.Println(atomic.LoadUint32(&a)) } func main() { go f() g() } 解决方法
没有.没有同步,所以没有
“happens before”的关系.
goroutines之间的Synchronization是通过通道通信和锁定操作完成的. 内存模型中的关键段落是:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |