美文网首页
2019-03-07

2019-03-07

作者: 小世界_99f6 | 来源:发表于2019-03-07 17:05 被阅读0次

golang中遇到的坑之 sync.once.do()

源码:

func (o *Once) Do(f func()) { if atomic.LoadUint32(&o.done) == 1 { return } // Slow-path. o.m.Lock() defer o.m.Unlock() if o.done == 0 { defer atomic.StoreUint32(&o.done, 1) f() }}

这个方法的定义是,只要f函数被执行一次之后就不会再执行,那么弊端就很明显了,如果f函数执行失败需要重新执行的时候,是不能被满足的。

如果需要写单例模式,但是单例初始化依赖于网络或者会出现失败需要重试的时候,还是自己乖乖的用锁来实现吧,不要偷懒用once.do

相关文章

网友评论

      本文标题:2019-03-07

      本文链接:https://www.haomeiwen.com/subject/nxhhpqtx.html