乐趣区

关于golang:golang中syncWaitGroup的使用

WaitGroup 是罕用的同步阻塞期待对象。WaitGroup 能够调度 goroutinue。首先调用同步期待组的 Add(num)其中 num 为正整数,num 会增加到 WaitGroup 中的 counter 数据里, 而后再协程外部调用 Done() ,Done() 办法调用的是 Add(-1),counter 值会缩小, 所有执行 wg.Wait()的 goroutinue 在 counter 不等于 0 时都会被梗塞。等于 0 时那些 goroutinue 不再阻塞
代码如下。上面的代码中有两个执行 wg.Wait()的 goroutinue。

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 的调度。

退出移动版