私はこのかなり基本的な問題の答えをオンラインで見つけられなかったので、何かを見逃しているに違いありません。私は3つのint
の値を保持できるバッファードチャネルを使用しています。バッファリングされたチャンネルがいっぱいになるのを待つ
私はそれを埋めるために3つのゴルーチンを使用しています。バッファされたチャンネルがいっぱいになると操作をしたいと思います。ここで
は、問題を説明するスニペットです:
func main() {
// Initialization of the slice a and 0 < n < len(a) - 1.
difs := make(chan int, 3)
go routine(a[:n], difs)
go routine(a[n + 1:], difs)
go routine(a[n - 1:n + 1], difs)
fmt.Println(<-difs) // Display the first result returned by one of the routine.
}
func routine(a []int, out chan<- int) {
// Long computation.
out <- result
}
私はすべての値が計算されているときfmt.Println(<-difs)
がint
の配列が表示されるように私のコードを更新したいと思います。私は3回使用することができます<-difs
しかし、Goはそれを行うクリーナーを提供しているのだろうかと思います。
多分あなたは[選択](https://tour.golang.org/concurrency/5) –
を使用する必要があります[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように、通常はチャンネルがいっぱいになるのを待つことはありません。 tはそれから同時に値を消費する。あなたはgoroutinesが完了するのを待っていますが、これはsync.WaitGroupを使用するものです。 – JimB