goroutine的gc在什么时候啊?

larstos · · 3103 次点击
应该会产生9个挂起的goroutine,发送了10个,只接收了一个,不明白8个是怎么算出来的。 最简单的解决方法是设置chan的长度: ```go ch := make(chan error, 10) ``` 比较复杂的方法涉及到对发送的数据计数: ```go var ( mu sync.Mutex counter int ) func A() { ch := make(chan error) for i := 0; i < 10; i++ { counter++ go func() { ch <- errors.New("") defer func() { mu.Lock() defer mu.Unlock() counter-- if counter == 0 { close(ch) } }() }() } defer func() { for range ch { } }() for { select { case <-ch: return } } } ```
#1