Go的sync.WaitGroup(二)

故事扮演 提交于 2019-11-29 06:23:15

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

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!