- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第13章同步
在第11章中,我们解释了如何使用通道在goroutine之间传递数据。然后,在第12章
中讨论了如何使用context包来管理goroutine的取消。本章将介绍并发编程的最后一部分:
同步。
向你展示如何等待多个goroutine执行完成,同时解释什么是竞争条件,如何使
用Go的-race命令行标志发现代码中的竞争条件,以及如何使用sync.Mutex和sync.RWMutex
修复代码中的这些问题。
最后,讨论如何使用sync.Once确保函数仅被执行一次。
13.1使用WaitGroup等待Goroutines
通常情况下,你可能希望在程序继续执行之前等待多个Goroutines执行完成。例如,
你可能想要生成一些不同尺寸的缩略图并等待它们全部生成后再继续。
13.1.1问题
如13.1所示,我们启动了5个新的goroutine,每个goroutine负责创建规格大小不
同的缩略图。然后等待它们全部执行完。
13.1启动多个Goroutine完成一个任务
funcTest_ThumbnailGenerator(t*testing.T)
{t.Parallel()
//我们需要为之生成缩略图的
constimage=foo.png
//启动5个goroutine生成缩略图
fori:=0;i5;i++{
//为每个缩略图启动一个新的goroutine
gogenerateThumbnail(image,i+1)
}
fmt.Println(Waitingforthumbnailstobegenerated)
第13章同步
在第11章中,我们解释了如何在goroutine之间使用通道传递数据。,在第12章中
讨论了如何使用上下文包来管理goroutine的取消。首先将介绍ARM编程的最后一部分:同
步。
向您展示如何等待多个goroutine执行完成,同时解释什么是竞争条件,如何
使用Go的‑race命令行标志发现代码中的竞争条件,以及如何使用sync.Mutex和
sync.RWMutex修复代码中的这些问题。
最后,讨论如何使用sync.Once确保函数仅被执行一次。
13.1使用WaitGroup等待协程
通常情况下,您可能希望在等待多个Goroutines执行完成之前程序继续执行。例如,
您可能想要生成一些不同的长度并等待它们全部生成然后继续。
13.1.1问题
如13.1所示,我们启动了5个新的goroutine,每个goroutine负责创建规格
大小不一样的重要。然后等待它们全部执行完成。
13.1启动多个Goroutine完成一个任务
funcTest_ThumbnailGenerator(t*testing.T)
{t.Parallel()//我们需要为之生成一个的const
image=foo.png//启动5个goroutine生成一个图
片fori:=0;我5;i++{//为每个人启动一个新的
goroutinegogenerateThumbnail(image,i+1)}
fmt.Println(等待生成缩略图)
原创力文档


文档评论(0)