sync包once小问题

goCurrent · · 2715 次点击
如果是多goroutine 情况下, o.done 和 atomic.LoadUint32(&o.done) 区别: 1、o.done的读取在执行上可能需要好几次 cpu 指令操作,这几次 cpu 指令执行中,可能有别的 goroutine 在修改这个 done 的值,导致你读取到的可能是一个不确定的值 2、用 atomic 这种原子操作,cpu 指令在执行中会保证别的goroutine不去修改这个值,所以读取到的是一个确定的值; 建议看一下 go 的内存模型: https://go.dev/ref/mem
#11
更多评论
<a href="/user/kingJ" title="@kingJ">@kingJ</a> 线程安全是指啥,两个goroutine同时读一个int应该不会panic
#2