Golang中的sync.WaitGroup是什么?

sync.WaitGroup 是 Go 语言中的一个同步原语,用于等待一组 goroutines 完成任务。sync.WaitGroup 提供了一个简单的方式来等待异步操作完成。

sync.WaitGroup 包含以下三个主要方法:

  1. Add(int):将 WaitGroup 计数器增加指定的值。通常在启动 goroutine 之前调用此方法。

  2. Done():减少 WaitGroup 计数器。通常在 goroutine 完成任务后调用此方法。

  3. Wait():阻塞调用,直到 WaitGroup 计数器归零。通常在主 goroutine 中调用此方法,等待其他 goroutine 完成任务。

下面是一个使用 sync.WaitGroup 的例子:

package main

import (
    "fmt"
    "sync"
    "time"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()

    fmt.Printf("Worker %d starting\n", id)

    time.Sleep(time.Second)
    fmt.Printf("Worker %d done\n", id)
}

func main() {
    var wg sync.WaitGroup

    for i := 1; i <= 5; i++ {
        wg.Add(1)
        go worker(i, &wg)
    }

    wg.Wait()
}

在这个例子中,我们创建了 5 个工作 goroutines ,每个 goroutine 完成工作后会调用 wg.Done() 来通知 WaitGroup 自己已完成任务。主 goroutine 通过调用 wg.Wait() 来等待所有的工作 goroutines 完成任务。

sync.WaitGroup 是实现并发同步的一个非常有用的工具,它简化了在多个 goroutines 完成操作之后进行协调的过程。

发表评论

后才能评论