私が同時に操作されている整数のスライス、持っている:私は同時に行くルーチンを実行しているの上限を持っているために、セマフォとしてバッファリングされたチャネルを使用していバッファされたチャネル(セマフォ)が空になるまで待つ方法はありますか?
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)
}
上記のコードは、最後または最後の2つの整数に達するまでうまくいきます。なぜなら、プログラムは最後の実行ルーチンが終了する前に終了するからです。
質問:バッファされたチャネルがなくなるのを待つ方法を教えてください。
よりcheeperです。バッファされたチャンネルは一杯になるとブロックしますが、空になるまでブロックする言語機能はありません。 – evanmcdonnal