sync.once 的源码Do方法精简问题

qiushenyang · · 714 次点击
效果不一样,非执行f()的线程执行的时候,官方的是肯定执行了f(),并且成功了. 你优化的版本,是不管执行是否完成了f() 如果f()里面是初始化一个 公共指针,比如 var a *test, fn()里面执行 a=&test{},官方的能保证不是空指针,而你的不可以
#1
更多评论
可以试试多线程,测试一下,你就明白了,里面的读写锁是有含义的.
#2
这层含义明白了 ,一个是返回的时候fn函数一定已经执行完了,我写的那个是不一定完成,这是一个逻辑上的不同。请问一下有没有效率上的不同,swap是不是在汇编这块会加cpu级别的锁,就是每次调用都会加,load不会加?
#3