【发布时间】:2023-03-10 06:52:01
【问题描述】:
我需要启动大量的 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
}
}
但问题在于对象的数量以及 goroutine 的数量可能会发生变化。是否可以更改通道的缓冲区大小?
是否有更优雅的方式来做到这一点?
【问题讨论】:
-
您可以在每次迭代时重新分配它,但您可能需要查看WaitGroup。
-
tjameson,感谢您的快速帮助。这看起来真的很好。你可能想把它作为一个答案。
-
完成,举个例子=D
标签: concurrency go channel coroutine goroutine