同步/ atomic.once.go中的两个原子样式代码是否必需?
问题描述:
在同步代码/ atomic.once.go是:同步/ atomic.once.go中的两个原子样式代码是否必需?
func (o *Once) Do(f func()) {
if atomic.LoadUint32(&o.done) == 1 { //A
//if o.done == 1 {
return
}
// Slow-path.
o.m.Lock()
defer o.m.Unlock()
if o.done == 0 {
f()
atomic.CompareAndSwapUint32(&o.done, 0, 1) //B
//o.done = 1
}
}
我不认为两个“原子式”代码A,B以上是必要的或有用的。 我认为这个锁已经足够了,如果A,B不是原子风格的话,那也可以。 我必须错过什么,请善意告诉我代码A,B的目的。 谢谢。
我认为你是对的。看来我错过了很重要。谢谢。 – hardPass 2013-02-27 16:12:19