Open utterances-bot opened 1 month ago
您好,读文章有一个问题,请教一下: 在3.3的改造代码里,您写的是
instance = &UserInfo{
Age: 18,
}
atomic.StoreUint32(&flag, 1)
如果这里发生了指令重排,变成了以下顺序
atomic.StoreUint32(&flag, 1)
instance = &UserInfo{
Age: 18,
}
这样别的线程读取的时候岂不是会读到nil的instance呢?
您好,读文章有一个问题,请教一下: 在3.3的改造代码里,您写的是
instance = &UserInfo{ Age: 18, } atomic.StoreUint32(&flag, 1)
如果这里发生了指令重排,变成了以下顺序
atomic.StoreUint32(&flag, 1) instance = &UserInfo{ Age: 18, }
这样别的线程读取的时候岂不是会读到nil的instance呢?
@RoaringWind Golang 中的 Atomic 主要保证了三件事,原子性、可见性、有序性。所以编译器不会这样乱重排。 具体可以看下 3.1 里面 atomic 的介绍。
感谢解惑。文章中已经不可用的一篇参考文献新地址如下:探索 golang 一致性原语
Golang Memory Model
行万里路,读万卷书
https://fanlv.fun/2020/06/09/golang-memory-model/