golang sync.WaitGroup使用示例 - Go语言中文社区

golang sync.WaitGroup使用示例


golang中同步方式

golang中有2种方式同步程序

  1. 一种使用channel
  2. 另一种使用锁机制。

sync.WaitGroup方法

sync.WaitGroup只有3个方法:

  1. Add()
  2. Done()
  3. Wait()

其中Done()是Add(-1)的别名。
简单的来说,使用Add()添加计数,Done()减掉一个计数,计数不为0, 阻塞Wait()的运行。

要注意的有一点。sync文档已经说明了的,The main goroutine calls Add to set the number of goroutines to wait for. Then each of the goroutines runs and calls Done when finished.也就是说,在运行main函数的goroutine里运行Add()函数,在其他的goroutine里面运行Done()函数。这个我是踩过雷了的。
最简单的案例就是sync文档里面的example,这里简单写了一个例子。

package main

import (
    "fmt"
    "time"
    "sync"
)
var wg sync.WaitGroup
func main() {

    for i := 0; i < 100; i++ {
        wg.Add(1)
        go fun(i)
    }
    fmt.Println("exit")
    wg.Wait()
}

func fun(i int)  {
    time.Sleep(time.Second * 2)
    fmt.Println(i)
    wg.Done()
}
版权声明:本文来源简书,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.jianshu.com/p/70688d248e8f
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-01-12 12:57:28
  • 阅读 ( 954 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢