孟斌

sync.WaitGroup 是 Go 语言标准库 sync 包提供的一个同步工具,用于等待一组协程完成执行。它通常用于确保所有协程完成后再继续执行后续的代码。WaitGroup 提供了三个主要方法:AddDone、和 Wait

1. WaitGroup 方法

2. 使用示例

以下是一个简单的示例,演示了如何使用 WaitGroup 等待一组协程完成:

package main

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

var wg sync.WaitGroup

func main() {
	
	for i := 1; i <= 3; i++ {
		wg.Add(1)
		go worker(i)
	}

	// 等待所有协程完成
	wg.Wait()

	fmt.Println("All workers have finished.")
}

func worker(id int) {
	defer wg.Done()
	fmt.Printf("Worker %d is starting\n", id)
	time.Sleep(2 * time.Second)
	fmt.Printf("Worker %d has finished\n", id)
}

在这个例子中,主协程使用 WaitGroup 来等待三个 worker 协程完成。每个 worker 协程在开始执行时调用 Add(1),在结束时调用 Done(),表示一个协程已完成。主协程通过 Wait 阻塞等待,直到所有的 worker 协程都完成后才继续执行。

WaitGroup 是 Go 中一种简单而强大的同步机制,适用于需要等待一组协程完成的场景,如并发任务的协同工作。


孟斯特

声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特