[Go] Golang并发控制: WaitGroup 含义和常规用法

 

一个 WaitGroup 等待一个 goroutine 集合的结束。

主 goroutine 调用 Add 设置需要等待的 goroutine 数量。

接下来每个 goroutine 运行并在结束时调用 Done。

同时,Wait 可以用来阻塞直到所有的 goroutine 结束。

 

package main

import (
    "fmt"
    "sync"
    "time"
)
/**
 * @https://www.cnblogs.com/farwish
 */
func main() {
    // 1.WaitGroup用于等待goroutine的集合完成
    var wg sync.WaitGroup

    // 2.设置数量2个goroutine需要等待
    wg.Add(2)

    go func() {
        time.Sleep(2 * time.Second)
        fmt.Println("1号完成")
        // 3.goroutine执行结束调用Done
        wg.Done()
    }()

    go func() {
        time.Sleep(2 * time.Second)
        fmt.Println("2号完成")
        wg.Done()
    }()

    // 4.阻塞直到子goroutine都结束
    wg.Wait()

    fmt.Println("都完成了")
}

 

Refer:Go SDK/src/sync/waitgroup.go

Link:https://www.cnblogs.com/farwish/p/15840547.html

posted on 2022-01-24 18:43  ercom  阅读(190)  评论(0)    收藏  举报