Ho bisogno di iniziare un'enorme quantità di goroutine e attendere la loro conclusione. Il modo più intuitivo sembra utilizzare un canale di aspettare fino a tutti loro sono finiti:Attendi la cessazione delle n goroutine
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
}
}
Ma il problema è che la quantità di oggetti e quindi la quantità di goroutines potrebbero cambiare. È possibile modificare la dimensione del buffer di un canale?
C'è forse un modo più elegante per farlo?
Puoi ridistribuire ogni iterazione, ma potresti voler dare un'occhiata a [WaitGroup] (http://golang.org/pkg/sync/#WaitGroup). – tjameson
tjameson, grazie per l'aiuto rapido. Sembra davvero buono. Potresti volerlo rendere una risposta. – lhk
Fatto, con un esempio = D – tjameson