golang sync WaitGroup

收藏待读

golang sync WaitGroup

剛才看golang的sync的包,看見一個很有用的功能。就是WaitGroup。

先說說WaitGroup的用途:它能夠一直等到所有的goroutine執行完成,並且阻塞主線程的執行,直到所有的goroutine執行完成。

WaitGroup總共有三個方法:Add(delta int),Done(),Wait()。簡單的說一下這三個方法的作用。

Add:添加或者減少等待goroutine的數量

Done:相當於Add(-1)

Wait:執行阻塞,直到所有的WaitGroup數量變成0

package main

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

func main() {
    var wg sync.WaitGroup

    for i := 0; i < 5; i = i + 1 {
        wg.Add(1)
        go func(n int) {
            // defer wg.Done()
            defer wg.Add(-1)
            EchoNumber(n)
        }(i)
    }

    wg.Wait()
}

func EchoNumber(i int) {
    time.Sleep(3e9)
    fmt.Println(i)
}

原文 : Go語言中文網

相關閱讀

免责声明:本文内容来源于studygolang.com,已注明原文出处和链接,文章观点不代表立场,如若侵犯到您的权益,或涉不实谣言,敬请向我们提出检举。