疑问 没有缓存的chan在发送阻塞的时候已经把值存进去了还是在读的时候存的

a312024054 · · 2418 次点击
本问题完结 经过查看chansend1的源码,并且添加了如下注释 ```go func chansend1(c *hchan, elem unsafe.Pointer) { print(&#34;chansend1: chan=&#34;, c, &#34;, elem=&#34;, elem, &#34;\n&#34;) chansend(c, elem, true, getcallerpc(unsafe.Pointer(&amp;c))) } ``` 增加源代码的打印信息 ```go fmt.Println(&#34;num=&#34;, &amp;num) go func() { time.Sleep(time.Second) fmt.Println(&#34;----------------&#34;) //c &lt;- *p //-------&gt; 11 c &lt;- num //-----&gt;10 }() ``` 使用 c&lt;-num 时的打印 如下 ``` chansend1: chan=0xc042014070, elem=0x4d87b0 num= 0xc04200e0b0 ---------------- chansend1: chan=0xc04203c060, elem=0xc042021fa8 10 ``` 使用c&lt;-*p 时的打印如下 ``` chansend1: chan=0xc042014070, elem=0x4d87b0 num= 0xc04200e0b0 ---------------- chansend1: chan=0xc04203c060, elem=0xc04200e0b0 11 ``` 应该可以证明<a href="/user/polaris" title="@polaris">@polaris</a> 假设是成立的
#17
更多评论
你这个有 data race,结果具有不确定性
#1
<a href="/user/channel" title="@channel">@channel</a> 所以两个的睡眠时间是不一样的呀
#2