Muszę rozpocząć wielką ilość goroutines i czekać na ich zakończenie. Intuicyjny sposób wydaje się używać kanału czekać, aż wszystkie z nich są wykończone:Poczekaj na zakończenie g goroutines
package main
type Object struct {
//data
}
func (obj *Object) Update(channel chan int) {
//update data
channel <- 1
return
}
func main() {
channel := make(chan int, n)
list := make([]Object, n, m)
for {
for _, object := range list {
go object.Update(channel)
}
for i := 0; i < n; i++ {
<-channel
}
//now everything has been updated. start again
}
}
Ale problemem jest to, że ilość przedmiotów, a zatem kwota goroutines może się zmienić. Czy można zmienić rozmiar bufora kanału?
Czy może być bardziej elegancki sposób na zrobienie tego?
Możesz dokonać ponownego przydzielenia każdej iteracji, ale możesz zajrzeć do [WaitGroup] (http://golang.org/pkg/sync/#WaitGroup). – tjameson
tjameson, dzięki za szybką pomoc. To wygląda naprawdę dobrze. Możesz chcieć, aby była to odpowiedź. – lhk
Zrobione, z przykładem = D – tjameson