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回答

ccmouse

2019-09-21

buffered chan只是对于非buffered chan的一个优化。逻辑上应该是一样的。具体同学这里定义buffered chan之后是如何解决的呢?

1
0

EnzoLiu

2021-03-24

我也是想到了这个办法,用了buffered chan

既然是worker.in分派了任务 还没有准备接收done,那么就可以把worker.done放到缓冲区内

等到全部任务派发了后,再来接收done,以此解除了死锁

1
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程