golang中有2种方式同步程序,一种使用channel,另一种使用锁机制。使用channel的案例可以参考我的博客:golang--使用channel来同步goroutine,这里要涉及的是锁机制,更具体的是sync.WaitGroup,一种较为简单的同步方法集。

sync.WaitGroup只有3个方法,Add(),Done(),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 mainimport ("fmt""sync"
)func main() {var wg sync.WaitGroupfor i := 0; i < 100; i++ {wg.Add(1)}for i := 0; i < 100; i++ {go wg.Done()}fmt.Println("exit")wg.Wait()
}func add(wg sync.WaitGroup) {wg.Add(1)
}func done(wg sync.WaitGroup) {wg.Done()
}

在自己的电脑使用godoc搭载的sync文档中,有一个bug,注明添加该包的方法是import "pkg/sync"。一般程序都是import "sync"。我自己测试了一下,import "sync"才是正确的,import "pkg/sync"编译都通不过各位也可以测试一下。在golang.org已经改正过来了。

转贴请注明来自:格通

转载于:https://www.cnblogs.com/getong/archive/2013/03/29/2988816.html

golang--sync.WaitGroup使用示例相关推荐

  1. Golang sync.WaitGroup 简介与用法

    1.简介 sync.WaitGroup 用于阻塞等待一组 Go 程的结束.主 Go 程调用 Add() 来设置等待的 Go 程数,然后该组中的每个 Go 程都需要在运行结束时调用 Done(), 递减 ...

  2. sync.Mutex 与 sync.WaitGroup 使用示例

    使用 sync.Mutex 与 sync.WaitGroup 线程不安全的用法: {var wg sync.WaitGroupcount := 0for i := 0; i < 10; i++ ...

  3. golang sync WaitGroup

    2019独角兽企业重金招聘Python工程师标准>>> 简介 它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成. WaitG ...

  4. Go sync.WaitGroup的用法

    介绍 经常会看到以下了代码: package mainimport ("fmt""time" )func main(){for i := 0; i < 1 ...

  5. golang中的sync.WaitGroup

    golang中的sync.WaitGroup Posted on 2015/04/09刚才看golang的sync的包,看见一个很有用的功能.就是WaitGroup. 先说说WaitGroup的用途: ...

  6. Golang gorouting 并发控制 sync.WaitGroup 介绍与使用

    WaitGroup简称同步组,用于等待goroutines结束的. 官方文档: type WaitGroupA WaitGroup waits for a collection of goroutin ...

  7. golang goroutine 协程同步 sync.WaitGroup 简介

    介绍 经常会看到以下了代码: package mainimport ("fmt""time" )func main(){for i := 0; i < 1 ...

  8. Golang中WaitGroup、Context、goroutine定时器及超时学习笔记

    原文连接:http://targetliu.com/2017/5/2... 好久没有发过文章了 - -||,今天发一篇 golang 中 goroutine 相关的学习笔记吧,以示例为主. WaitG ...

  9. golang基础-WaitGroup、kafka消费者

    WaitGroup WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执 ...

最新文章

  1. Google工作原理
  2. 实现ARM——Linux的自动登录
  3. WinForm编程数据视图之DataGridView浅析
  4. 摆放家具-完成添加家具方法
  5. java判断某个字符串是否是数字
  6. python复杂非线性方程_非线性方程python入门——屠龙刀
  7. 吴恩达深度学习编程作业:TensorFlow
  8. html网页设计课程的思维导图,UI设计初级教程学哪些?课程大纲和思维导图分享给你!...
  9. Oracle分页查询与RowNum
  10. 单片机之步进电机速度控制篇(三)
  11. php旧物交易开源代码_php二手市场交易系统毕业设计(含源文件)
  12. 2021年谷歌地球专业版使用方法,解决Google Earth无法连接服务器问题。
  13. [摘录]谁说大象不能跳舞目录
  14. java 生成pdf文件_Java 生成PDF文档的示例代码
  15. T-SQL简介及基本语法
  16. k8s 部署 xxl-job-admin:2.3.0
  17. 单反相机的传奇—佳能单反50年辉煌之路(前言)
  18. 语文默写的决斗(YZOJ-1069)
  19. 工具--国内最常用开源镜像站大汇总,解决你下载软件慢的问题
  20. Windows配置互联网访问检测服务器-IspSrv

热门文章

  1. 解释上采样和PixelShuffle
  2. 全卷积神经网路【U-net项目实战】肺结节分割案例分析:DSB3Tutorial
  3. Android移动开发之【Android实战项目】漂亮Button样式
  4. oracle取两个小时内的数据,【求解】一个时间条件,查两个不同时间段数据怎么查...
  5. idea server日志乱码_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理
  6. win10定时关机c语言,Win10系统怎么定时关机?Windows10设置定时关机的两种方法
  7. java lombok 视频_Java开发神器Lombok使用详解
  8. 浅析网站前期哪些制作是能够方便后期优化的?
  9. c语言空中升级协议,esp32 http空中升级
  10. python读取excel写入数据库_python实现读取excel写入mysql的小工具详解