0
点赞
收藏
分享

微信扫一扫

WaitGroup基本用法

我是芄兰 2022-05-17 阅读 98

WaitGroup介绍

sync包的WaitGroup类型可以实现一对多的goroutine的协助流程。

WaitGroup类型拥有三个指针方法:Add、Done和Wait。可以类比为一个计数器,默认值是0,可以通过调用方法来增加或者减少

WaitGroup类型的Done方法,用于对其所属值中计数器的值进行减一操作。我们可以在需要等待的 goroutine 中,通过defer语句调用它。而此类型的Wait方法的功能是,阻塞当前的 goroutine,直到其所属值中的计数器归零。如果在该方法被调用的时候,那个计数器的值就是0,那么它将不会做任何事情。

package test

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

func TestWaitGroup(t *testing.T) {
    var wg sync.WaitGroup

    for i := 0; i < 3; i++ {
        wg.Add(1)
        go process(i, &wg)
    }
    wg.Wait()
    fmt.Println("All End")
}

func process(i int, wg *sync.WaitGroup) {
    fmt.Printf("Start Process %d \n", i)
    time.Sleep(2 * time.Second)
    fmt.Printf("End Process %d \n", i)
    wg.Done()
}

=== RUN   TestWaitGroup
Start Process 2 
Start Process 1 
Start Process 0 
End Process 0 
End Process 2 
End Process 1 
All End
--- PASS: TestWaitGroup (2.00s)
PASS
举报

相关推荐

WaitGroup

golang waitgroup

golang的waitgroup

Git基本用法

Axios基本用法

Vue基本用法

Leaflet基本用法

0 条评论