8:50另一种解决方法,用buffered chan
来源:11-2 使用Channel等待任务结束

remembers
2019-09-16
func createWorker() worker {
w := worker{
in: make(chan int),
done: make(chan bool, 2),
}
go doWorker(w.in, w.done)
return w
}
写回答
2回答
-
buffered chan只是对于非buffered chan的一个优化。逻辑上应该是一样的。具体同学这里定义buffered chan之后是如何解决的呢?
10 -
EnzoLiu
2021-03-24
我也是想到了这个办法,用了buffered chan
既然是worker.in分派了任务 还没有准备接收done,那么就可以把worker.done放到缓冲区内
等到全部任务派发了后,再来接收done,以此解除了死锁
10
相似问题