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

 

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