Do函数里面 刚开始进来的时候,直接用0.done == 0 判断也能达到效果,atomic.LoadUint32(&o.done) == 0目的是啥,为了很多goroutine同时调用Do函数,减少o.m.Lock()的调用吗
谢谢回答。我也知道能确定,但是问题是不用原子对逻辑正确性没有影响,因为有锁保证。benchmark的话会发现性能也没区别。最终只能想是为了多操作系统不同底层代码和不同go版本的适配性。
#18
更多评论
<a href="/user/kingJ" title="@kingJ">@kingJ</a> 线程安全是指啥,两个goroutine同时读一个int应该不会panic
#2