Tôi cần bắt đầu một lượng lớn goroutines và đợi cho đến khi chấm dứt. Cách trực quan dường như sử dụng một kênh để chờ đợi cho đến khi tất cả trong số họ đã kết thúc:Đợi chấm dứt n 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
}
}
Nhưng vấn đề là số lượng đối tượng và do đó số lượng goroutines có thể thay đổi. Có thể thay đổi dung lượng bộ đệm của kênh không?
Có cách nào thanh lịch hơn để thực hiện việc này không?
Bạn có thể phân bổ lại mỗi lần lặp lại, nhưng bạn có thể muốn xem [WaitGroup] (http://golang.org/pkg/sync/#WaitGroup). – tjameson
tjameson, cảm ơn sự giúp đỡ nhanh chóng. Điều đó có vẻ thực sự tốt. Bạn có thể muốn làm cho nó một câu trả lời. – lhk
Xong, với ví dụ = D – tjameson