Go sync.WaitGroup的使用

发布时间:2023-03-18浏览次数:0

支持注册ChatGPT Plus的OneKey虚拟卡
绑定Apple Pay、Google Pay、支付宝和微信支付进行日常消费

注册和了解更多 ->

silver

Go中的sync.WaitGroup是一种同步机制,用于等待多个goroutine完成它们的工作。通过WaitGroup,我们可以确保一个goroutine等待其他goroutines完成之后再执行。

使用WaitGroup的步骤如下:

  1. 创建一个WaitGroup对象。
var wg sync.WaitGroup
  1. 在每个goroutine执行之前,通过Add()方法告诉WaitGroup要等待多少个goroutine完成。
wg.Add(1)
  1. 在每个goroutine完成时,通过Done()方法告诉WaitGroup一个goroutine已经完成了。
wg.Done()
  1. 最后,在主goroutine中使用Wait()方法等待所有的goroutine完成。
wg.Wait()

示例代码如下:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    
    for i := 0; i < 10; i++ {
        wg.Add(1)
        
        go func() {
            defer wg.Done()
            fmt.Println("goroutine ", i, "done")
        }()
    }
    
    wg.Wait()
    fmt.Println("all goroutines done")
}

输出结果:

goroutine  10 done
goroutine  10 done
goroutine  8 done
goroutine  9 done
goroutine  1 done
goroutine  5 done
goroutine  6 done
goroutine  4 done
goroutine  7 done
goroutine  3 done
all goroutines done

通过输出结果可以看出,10个goroutine都在执行,但是它们的执行顺序是不确定的。最后的输出表明所有的goroutine都已完成,main函数会等待所有的goroutine完成后再结束。

字节笔记本扫描二维码查看更多内容