![image.png](https://static.studygolang.com/200715/8b473bf59083eaade2019ce5597765df.png)
这是源码
![image.png](https://static.studygolang.com/200715/736d526241cd54202a4dc7ba53e73de9.png)
这是我改的
不知道我这么改的有什么问题,但是经过我的测试实际是执行了一次呀 ,达到了同样的效果
更多评论
效果不一样,非执行f()的线程执行的时候,官方的是肯定执行了f(),并且成功了.
你优化的版本,是不管执行是否完成了f()
如果f()里面是初始化一个 公共指针,比如 var a *test, fn()里面执行 a=&test{},官方的能保证不是空指针,而你的不可以
#1
这层含义明白了 ,一个是返回的时候fn函数一定已经执行完了,我写的那个是不一定完成,这是一个逻辑上的不同。请问一下有没有效率上的不同,swap是不是在汇编这块会加cpu级别的锁,就是每次调用都会加,load不会加?
#3