Go语言sync库和WaitGroup的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言sync库和WaitGroup的使用相关的知识,希望对你有一定的参考价值。

// code_041_sync_WaitGroup project main.go
package main

import (
    "fmt"
    "sync"
)

func main() {
    fmt.Println("Hello World!")
    var wg sync.WaitGroup
    wg.Add(2)
    go func() {
        defer wg.Done()
        for i := 0; i < 10000; i++ {
            fmt.Printf("Hello,Go.This is %d
", i)
        }
    }()
    go func() {
        defer wg.Done()
        for i := 0; i < 10000; i++ {
            fmt.Printf("Hello, world.This is %d
", i)
        }
    }()
    wg.Wait()
}

sync.WaitGroup是一个计数的信号量,使main函数所在主线程等待两个goroutine执行完成后再结束,否则两个goroutine还在运行时,主线程已经结束。
sync.WaitGroup使用非常简单,使用Add方法设设置计数器为2,每一个goroutine的函数执行完后,调用Done方法减1。Wait方法表示如果计数器大于0,就会阻塞,main函数会一直等待2个goroutine完成再结束。

以上是关于Go语言sync库和WaitGroup的使用的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 并发编程(11):同步sync,等待组(sync.WaitGroup)—— 保证在并发环境中完成指定数量的任务

Go sync.WaitGroup的学习

7.3 Go语言中通过WaitGroup控制并发

7.3 Go语言中通过WaitGroup控制并发

Go语言开发(十三)Go语言常用标准库三

Go语言基础-sync包