【发布时间】:2021-03-23 08:51:48
【问题描述】:
这让我很困惑,我在阅读 golang 内存模型,https://golang.org/ref/mem
var l sync.Mutex
var a string
func f() {
a = "hello, world"
l.Unlock()
}
func main() {
l.Lock()
go f()
l.Lock()
print(a)
}
原子互斥锁解锁
UnLock: new := atomic.AddInt32(&m.state, -mutexLocked)
Lock: atomic.CompareAndSwapInt32(&m.state, 0, mutexLocked)
我的问题是,如果原子 AddInt32,CompareAndSwapInt32 会导致内存障碍,如果 a 将在不同的 goroutine 中可见。
在java中,我知道AtomicInteger,“volatile”的内存屏障,保持线程字段可见。
【问题讨论】:
标签: go memory-barriers memory-model