Go的sync.WaitGroup(二):WaitGroup讓主程序與協程全部都執行 並且全部執行完成

WaitGroup

add與done只是用來統計數量的  done減爲0的時候就告訴wait結束

wait只是用來堵塞主函數的  當協程數爲0時候結束

有了它我們不用寫time.Sleep或者<-channelname了

package main

import (
    "fmt"
    "sync"
)

var waitgroup sync.WaitGroup

func Afunction(shownum int) {
    fmt.Println(shownum)
    waitgroup.Done() //任務完成,將任務隊列中的任務數量-1,其實.Done就是.Add(-1)
}

func main() {
    for i := 0; i < 6; i++ {
        waitgroup.Add(1) //每創建一個goroutine,就把任務隊列中任務的數量+1
        go Afunction(i)
    }
    waitgroup.Wait() //.Wait()這裏會發生阻塞,直到隊列中所有的任務結束就會解除阻塞
}

// 5
// 3
// 2
// 0
// 1
// 4

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章