Golang中的sync包的WaitGroup操作
陷阱在WaitGroup的3个函数的调用顺序上。先回顾下3个函数的功能:Add:给计数器增加delta,比如启动1个协程就增加1。考一考下面的程序是创建了协程father,然后father协程创建了10个子协程,main函数等待所有协程结束后退出,看看下面代码有没有什么问题?如果没有看下面的运行结果:main函数在子协程结束前就开始结束了。正确的做法Add函数一定要在Wait函数执行前执行,这在Add函数的文档中就提示了: Note that calls with a positive delta that occur when the counter is zero must happen before a Wait.。在协程情况下,我们不能预知协程中代码执行的时间是否早于Wait函数的执行时间,但是,我们可以在分配协程前就执行Add函数,然后再执行Wait函数,以此确保。
下载地址
用户评论