猿问

go 同步 goroutine 的首选方式是什么

我有一个昂贵的函数,可以应用于切片的所有项目。我正在使用 goroutines 来处理这个问题,每个 goroutine 处理切片的一项。


func Huge(lst []foo) {

  for _, item := range lst {

     go performSlow(item)

  }


  // How do I synchronize here ?

  return someValue(lst)

}

问题是,如评论中所示,在调用someValue函数之前等待所有 goroutine 完成其工作的首选方法是什么?将频道传递给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)

}

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


跃然一笑
浏览 193回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答