博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang--sync.WaitGroup使用示例
阅读量:5826 次
发布时间:2019-06-18

本文共 1010 字,大约阅读时间需要 3 分钟。

hot3.png

golang中有2种方式同步程序,一种使用channel,另一种使用锁机制。使用channel的案例可以参考我的博客:,这里要涉及的是锁机制,更具体的是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.WaitGroup    for 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://my.oschina.net/u/191928/blog/618616

你可能感兴趣的文章
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
hive基本操作与应用
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
django 目录结构修改
查看>>
win8 关闭防火墙
查看>>
CSS——(2)与标准流盒模型
查看>>
C#中的Marshal
查看>>
linux命令:ls
查看>>
Using RequireJS in AngularJS Applications
查看>>
hdu 2444(二分图最大匹配)
查看>>