登录
首页 >  Golang >  Go问答

等待 go-routine 结束的方法是什么?

来源:stackoverflow

时间:2024-03-10 11:51:23 450浏览 收藏

从现在开始,努力学习吧!本文《等待 go-routine 结束的方法是什么?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

以下是场景:

inputCh := g(abc) // return <- chan []string


slice := make([]map[string][]string, 0)
m := sync.Mutex{}
for whatever := range inputCh {
    go func(whatever []string) {
        matches := f(xyz, whatever) // returns map[string][]string
        m.Lock()
        slice = append(slice, matches)
        m.Unlock()
    }(whatever)
}

z := merge(slice...)

我们不知道,inputch 何时关闭(close(inputch))

只有在所有 go 例程完成并更新 slice 后,我们才需要调用 merge(slice...)

不确定是否可以使用 sync.waitgroup

如何确保 merge(slice...) 仅在 slice 被所有 go 例程更新后才被调用?


解决方案


使用 sync.waitgroup 并检查通道何时关闭

var wg sync.WaitGroup

for {
    whatever, ok := <-inputCh
    if !ok { // check inputCh is close
        break
    }
    // add delta
    wg.Add(1)
    go func(whatever []string) {
        matches := f(xyz, whatever)
        m.Lock()
        slice = append(slice, matches)
        m.Unlock()
        // goroutine is done
        wg.Done()
    }(whatever)
}

// waits until all the goroutines call "wg.Done()"
wg.Wait()

理论要掌握,实操不能落!以上关于《等待 go-routine 结束的方法是什么?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>