没睡的 gopher 卷王请进

讨论 未结 5 44
hihanley
hihanley 会员 2022年4月19日 17:44 发表
<pre><code class="language-go">func TestClose(t *testing.T) { rand.Seed(time.Now().UnixNano()) wg := sync.WaitGroup{} wg.Add(1) go func() { defer wg.Done() stop := make(chan struct{}) // goroutine 1 go func() { for range stop { return } }() // goroutine 2 go func() { defer close(stop) for { if rand.Intn(10) &lt; 3 { return } } }() &lt;-stop }() wg.Wait() } </code></pre> <p>什么情况下 goroutine2 退出了但是 1 没退出</p>
收藏(0)  分享
相关标签: 灌水交流
注意:本文归作者所有,未经作者允许,不得转载
5个回复
  • pigmen
    2022年4月19日 18:46
    这段代码如果啥都不改的话,应该是几率性的 1 没退出。 如果 设置 max procs 为 1 ,百分百 1 没退出
    0 0
  • hihanley
    2022年4月19日 19:14
    大佬,要怎么改才能让 2 退出 1 也退出呢
    0 0
  • Trim21
    2022年4月19日 19:14
    wg.Done 加在 1 2 这两个 goroutine 里
    0 0
  • Trim21
    2022年4月19日 19:44
    懒得格式化了,凑合看
    0 0