我有整數的片,其被同時操縱:如何等待緩衝通道(信號量)爲空?
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