Go的WaitGroup详解

简介: 在Go语言中, `sync.WaitGroup` 是一种用于等待一组goroutine完成执行的同步原语。它允许您协调和同步多个goroutine的执行。

在Go语言中, sync.WaitGroup 是一种用于等待一组goroutine完成执行的同步原语。它允许您协调和同步多个goroutine的执行。

下面是对 sync.WaitGroup 的详细解释:

  1. 创建 sync.WaitGroup :要使用 sync.WaitGroup ,需要使用 sync.WaitGroup{} 语法创建一个实例。

  2. 将goroutine添加到等待组:在启动goroutine之前,使用 Add() 方法将其添加到等待组。这会增加等待组的内部计数器。

  3. Goroutine的执行:每个goroutine在完成执行时应调用等待组的 Done() 方法。这会减少等待组的内部计数器。

  4. 等待goroutine完成:主goroutine或其他需要等待其他goroutine完成的goroutine可以调用等待组的 Wait() 方法。这会阻塞执行,直到等待组的内部计数器变为零。

以下是一个示例,演示了如何使用 sync.WaitGroup

package main

import (
    "fmt"
    "sync"
)

func main() {
   
    var wg sync.WaitGroup

    // 添加2个goroutine到等待组
    wg.Add(2)

    go func() {
   
        defer wg.Done()
        fmt.Println("Goroutine 1")
    }()

    go func() {
   
        defer wg.Done()
        fmt.Println("Goroutine 2")
    }()

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

    fmt.Println("All goroutines completed")
}

在上面的示例中,我们创建了一个 sync.WaitGroup 实例,并使用 Add() 方法将两个goroutine添加到等待组。每个goroutine在完成执行时调用 Done() 方法。然后,主goroutine调用 Wait() 方法来等待所有的goroutine完成。一旦所有的goroutine都完成了执行,就会打印"All goroutines completed"。

通过使用 sync.WaitGroup ,我们可以有效地等待和同步多个goroutine的执行,确保在继续执行之前,所有需要等待的goroutine都已经完成。

目录
相关文章
|
6月前
|
Java Go 调度
Go语言并发(一)——goroutine与Waitgroup
Go语言并发(一)——goroutine与Waitgroup
|
存储 Cloud Native Go
Go语言 WaitGroup 源码知多少
Go语言 WaitGroup 源码知多少
|
Go 开发者
golang 系列:waitgroup 解析
Golang 提供了简洁的 go 关键字来让开发者更容易的进行并发编程,同时也提供了 WaitGroup 对象来辅助并发控制。今天我们就来分析下 WaitGroup 的使用方法,顺便瞧一瞧它的底层源码。
285 0
golang 系列:waitgroup 解析
|
12天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
24 7
|
11天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
12天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
88 71
|
11天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
96 67
|
14天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
86 62
|
16天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####
|
12天前
|
存储 Go
go语言中映射
go语言中映射
29 11