Go的sync.WaitGroup(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/fujian9544/article/details/100538199

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

 

猜你喜欢

转载自blog.csdn.net/fujian9544/article/details/100538199