golang中sync.WaitGroup的使用

WaitGroup是经常使用的同步阻塞等待对象。WaitGroup能够调度goroutinue。首先调用同步等待组的Add(num)其中num为正整数,num会添加到WaitGroup中的counter数据里, 而后再协程内部调用Done() ,Done() 方法调用的是Add(-1),counter值会减小,全部执行wg.Wait()的goroutinue在counter不等于0时都会被堵塞。等于0时那些goroutinue再也不阻塞
代码以下。下面的代码中有两个执行wg.Wait()的goroutinue。golang

func main() {
    var wg = sync.WaitGroup{}
    wg.Add(1)
    go func() {
        wg.Done()
    }()
    go func() {
        wg.Wait()
        fmt.Println("Hi1")
    }()
    wg.Wait()
    fmt.Println("Hi2")
}

可是由于goroutinue调度缘由上面的代码的输出不惟一顺序和数量均可能不同。具体缘由能够查看golang中GMP的调度。code

相关文章
相关标签/搜索