golang--sync.WaitGroup使用示例
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使用示例相关推荐
- Golang sync.WaitGroup 简介与用法
1.简介 sync.WaitGroup 用于阻塞等待一组 Go 程的结束.主 Go 程调用 Add() 来设置等待的 Go 程数,然后该组中的每个 Go 程都需要在运行结束时调用 Done(), 递减 ...
- sync.Mutex 与 sync.WaitGroup 使用示例
使用 sync.Mutex 与 sync.WaitGroup 线程不安全的用法: {var wg sync.WaitGroupcount := 0for i := 0; i < 10; i++ ...
- golang sync WaitGroup
2019独角兽企业重金招聘Python工程师标准>>> 简介 它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成. WaitG ...
- Go sync.WaitGroup的用法
介绍 经常会看到以下了代码: package mainimport ("fmt""time" )func main(){for i := 0; i < 1 ...
- golang中的sync.WaitGroup
golang中的sync.WaitGroup Posted on 2015/04/09刚才看golang的sync的包,看见一个很有用的功能.就是WaitGroup. 先说说WaitGroup的用途: ...
- Golang gorouting 并发控制 sync.WaitGroup 介绍与使用
WaitGroup简称同步组,用于等待goroutines结束的. 官方文档: type WaitGroupA WaitGroup waits for a collection of goroutin ...
- golang goroutine 协程同步 sync.WaitGroup 简介
介绍 经常会看到以下了代码: package mainimport ("fmt""time" )func main(){for i := 0; i < 1 ...
- Golang中WaitGroup、Context、goroutine定时器及超时学习笔记
原文连接:http://targetliu.com/2017/5/2... 好久没有发过文章了 - -||,今天发一篇 golang 中 goroutine 相关的学习笔记吧,以示例为主. WaitG ...
- golang基础-WaitGroup、kafka消费者
WaitGroup WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执 ...
最新文章
- Google工作原理
- 实现ARM——Linux的自动登录
- WinForm编程数据视图之DataGridView浅析
- 摆放家具-完成添加家具方法
- java判断某个字符串是否是数字
- python复杂非线性方程_非线性方程python入门——屠龙刀
- 吴恩达深度学习编程作业:TensorFlow
- html网页设计课程的思维导图,UI设计初级教程学哪些?课程大纲和思维导图分享给你!...
- Oracle分页查询与RowNum
- 单片机之步进电机速度控制篇(三)
- php旧物交易开源代码_php二手市场交易系统毕业设计(含源文件)
- 2021年谷歌地球专业版使用方法,解决Google Earth无法连接服务器问题。
- [摘录]谁说大象不能跳舞目录
- java 生成pdf文件_Java 生成PDF文档的示例代码
- T-SQL简介及基本语法
- k8s 部署 xxl-job-admin:2.3.0
- 单反相机的传奇—佳能单反50年辉煌之路(前言)
- 语文默写的决斗(YZOJ-1069)
- 工具--国内最常用开源镜像站大汇总,解决你下载软件慢的问题
- Windows配置互联网访问检测服务器-IspSrv
热门文章
- 解释上采样和PixelShuffle
- 全卷积神经网路【U-net项目实战】肺结节分割案例分析:DSB3Tutorial
- Android移动开发之【Android实战项目】漂亮Button样式
- oracle取两个小时内的数据,【求解】一个时间条件,查两个不同时间段数据怎么查...
- idea server日志乱码_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理
- win10定时关机c语言,Win10系统怎么定时关机?Windows10设置定时关机的两种方法
- java lombok 视频_Java开发神器Lombok使用详解
- 浅析网站前期哪些制作是能够方便后期优化的?
- c语言空中升级协议,esp32 http空中升级
- python读取excel写入数据库_python实现读取excel写入mysql的小工具详解