sync.WaitGroup和嵌套循环
我想为迭代嵌套循环添加并发性,但是遇到了麻烦。这个示例使用sync.WaitGroup有什么问题?
originCities := [3]string{"LED", "MOW", "PRS"}destinationCities := [2]string{"UKT", "AAC"}
wg := &sync.WaitGroup{}
wg.Add(len(originCities) * len(destinationCities))
for _, originIata := range originCities {
for _, destinationIata := range destinationCities {
go func () {
fmt.Println(originIata)
fmt.Println(destinationIata)
wg.Done()
}()
}
}
wg.Wait()
我越来越
PRS AAC PRS AAC PRS AAC PRS AAC PRS AAC PRS AAC
因此,您可能会看到它跳过了两个数组的第一个元素,而仅迭代了最后一个元素。任何想法如何解决此问题?
回答:
这是一个关闭问题。您需要将值传递到循环内的goroutine中,如下所示:
for _, originIata := range originCities { for _, destinationIata := range destinationCities {
go func (originIata, destinationIata string) {
fmt.Println(originIata)
fmt.Println(destinationIata)
wg.Done()
}(originIata, destinationIata)
}
}
以上是 sync.WaitGroup和嵌套循环 的全部内容, 来源链接: utcz.com/qa/403587.html