我有整数的片,其被同时操纵:如何等待缓冲通道(信号量)为空?
ints := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
以具有上限同时运行的去例程我使用的缓冲信道作为旗语:
sem := make(chan struct{}, 2)
for _, i := range ints {
// acquire semaphore
sem <- struct{}{}
// start long running go routine
go func(id int, sem chan struct{}) {
// do something
// release semaphore
<- sem
}(i, sem)
}
上面的代码工作得很好,直到最后一个或最后两个整数达到了,因为那些最后走程序完成之前,程序结束。
问题:我怎么等待缓冲通道地漏?
你必须使用一个互斥体或东西。缓冲的通道在满时会阻塞,但没有任何语言功能会阻塞,直到它为空。 – evanmcdonnal