可以使用 sync 包中的 WaitGroup 来实现多个协程执行后等待所有协程完成再执行的需求。

WaitGroup 是一个计数信号量,用来统计协程的数量。可以通过 Add 方法来增加计数,通过 Done 方法来减少计数,通过 Wait 方法来等待协程计数为 0。

下面是一个使用 WaitGroup 的示例代码:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            fmt.Println("goroutine", i, "start")
            // do something
            fmt.Println("goroutine", i, "end")
        }(i)
    }

    wg.Wait()
    fmt.Println("all goroutines finished")
}

在这个例子中,首先创建了一个 WaitGroup 对象 wg,然后通过 for 循环创建了 10 个协程,并且增加了计数器。在协程内部,执行完任务后通过 Done 方法来减少计数器。

最后在主协程中调用 Wait 方法,等待所有协程的计数器为 0,然后输出 "all goroutines finished"。

Golang 协程同步:WaitGroup 实现多个协程执行完后再执行

原文地址: https://www.cveoy.top/t/topic/lCA1 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录