gpt4 book ai didi

synchronization - 什么是同步 goroutines 的首选方式

转载 作者:IT王子 更新时间:2023-10-29 01:17:16 24 4
gpt4 key购买 nike

我有一个昂贵的功能,我将其应用于 slice 的所有项目。我正在使用 goroutines 来处理这个问题,每个 goroutine 处理 slice 的一项。

func Huge(lst []foo) {
for _, item := range lst {
go performSlow(item)
}

// How do I synchronize here ?
return someValue(lst)
}

问题是,如评论中所示,在调用 someValue 函数之前等待所有 goroutine 完成其工作的首选方法是什么?将一个 channel 传递给 performSlow 并等待每个人都写过它,但它似乎有点矫枉过正:

func Huge(lst []foo) {
ch := make(chan bool)

for _, item := range lst {
go performSlow(item, ch) // performSlow does its job, then writes a dummy value to ch
}

for i := range lst {
_ = <-ch
}

return someValue(lst)
}

是否有更好的(即更有效和/或更惯用的)方法来做到这一点?

最佳答案

使用 sync.WaitGroup ( http://godoc.org/sync#WaitGroup )

func Huge(lst []foo) {
var wg sync.WaitGroup
for _, item := range lst {
wg.Add(1)
go func() {
performSlow(item)
wg.Done()
}()
}

wg.Wait()
return someValue(lst)
}

关于synchronization - 什么是同步 goroutines 的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20054671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com