117.info
人生若只如初见

Go WaitGroup的使用方式及实例详解

WaitGroup 是 Go 语言的一个并发控制机制,它可以用于等待一组 goroutine 的结束。WaitGroup 提供了三个方法:Add、Done 和 Wait。

  1. Add 方法:用于设置 WaitGroup 中等待的 goroutine 的数量。Add 方法的参数是一个整数,表示需要等待的 goroutine 的数量。通常在启动每个 goroutine 之前都会调用 Add 方法来增加要等待的 goroutine 的数量。

  2. Done 方法:用于通知 WaitGroup 一个 goroutine 的结束。在 goroutine 的最后调用 Done 方法来减少 WaitGroup 中等待的 goroutine 的数量。

  3. Wait 方法:用于阻塞当前 goroutine,直到 WaitGroup 中等待的 goroutine 的数量变为 0。一般在主 goroutine 里调用 Wait 方法,等待所有子 goroutine 结束后再继续执行。

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

package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
fmt.Printf("goroutine %d\n", i)
}(i)
}
wg.Wait()
fmt.Println("All goroutines finished")
}

在上面的例子中,首先创建了一个 WaitGroup 对象 wg。然后使用一个 for 循环启动了 5 个 goroutine,并在每个 goroutine 中调用了 wg.Add(1) 来增加 WaitGroup 中等待的 goroutine 的数量。在每个 goroutine 的最后调用了 wg.Done() 来通知 WaitGroup 一个 goroutine 的结束。最后在主 goroutine 中调用了 wg.Wait() 来等待所有的子 goroutine 结束。

上面的代码运行时,可能会输出类似如下的结果:

goroutine 4
goroutine 0
goroutine 3
goroutine 2
goroutine 1
All goroutines finished

可以看到,不同的 goroutine 的输出顺序是随机的,这是因为它们是并发执行的。

总结:WaitGroup 是 Go 语言中一个用于等待一组 goroutine 结束的机制。通过调用 Add、Done 和 Wait 方法,可以实现对一组 goroutine 的并发控制。

未经允许不得转载 » 本文链接:https://www.117.info/ask/feaa9AzsLBAZTAVw.html

推荐文章

  • c语言和go语言哪个更适合初学者

    对于初学者来说,选择C语言还是Go语言取决于你的学习目标和兴趣。C语言适合想要深入了解计算机底层原理、进行系统级编程或对性能有极高要求的开发者。而Go语言则...

  • c语言和go语言哪个更安全

    C语言和Go语言各有其安全特点,但总体来说,Go语言在安全性方面表现更佳。以下是它们安全性对比的相关信息:
    C语言的安全性挑战 缓冲区溢出:C语言没有自动...

  • c语言和go语言哪个更稳定

    C语言和Go语言各有其独特的优势和适用场景,稳定性方面很难一概而论,它们在不同方面各有千秋。以下是对C语言和Go语言稳定性的分析:
    C语言稳定性 内存管理...

  • c语言和go语言哪个应用广

    C语言和Go语言各有其广泛的应用领域,选择哪种语言取决于具体的项目需求、开发团队的技能和经验。以下是C语言和Go语言的应用领域对比:
    C语言的应用领域 系...

  • PHP chdir()函数的作用是什么

    PHP中的chdir()函数用于改变当前工作目录。它的作用是将当前工作目录更改为指定的目录。这在需要在脚本中访问其他目录的文件时非常有用。使用chdir()函数可以实现...

  • 提高Go语言应用程序性能的关键:内存优化和垃圾回收技巧

    提高Go语言应用程序性能的关键主要包括内存优化和垃圾回收技巧。下面是一些具体的建议: 使用合适的数据结构:Go语言提供了丰富的数据结构,选择合适的数据结构可...

  • mysql索引唯一性检查的方法是什么

    MySQL索引的唯一性检查是通过在创建索引时指定UNIQUE关键字来实现的。具体步骤如下:1. 首先,使用CREATE TABLE语句创建一个表,其中包含要创建唯一索引的列。2....

  • oracle怎么快速导入csv数据

    要快速导入CSV数据到Oracle,可以使用以下步骤:1. 首先,创建一个表来存储CSV数据。可以使用Oracle SQL Developer或SQL*Plus等工具连接到Oracle数据库,并使用C...