我一定錯過了一些東西,因爲我還沒有找到在線解答這個非常基本的問題。我正在使用能夠保存三個int
值的緩衝通道。等待一個緩衝通道充滿
然後,我使用三個goroutines來填充它,並且我想在緩衝通道已滿時執行操作。
這裏是一個片段說明問題:
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
數組當所有的值已經計算出來。我可以使用三次<-difs
,但我想知道Go是否提供了更乾淨的方法。
也許你應該使用[select](https://tour.golang.org/concurrency/5) –
這聽起來就像[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - 你通常不會等待頻道充滿,因爲你可以'然後同時從中消費價值。您希望等待goroutine完成,這是您使用sync.WaitGroup的原因。 – JimB