Go 并发控制--WaitGroup的使用
开发过程中,经常遇到task之间的同步问题。例如,多个子task并发完成一部分任务,主task等待他们最后结束。
在Go语言,实现同步的一种方式就是WaitGroup。
Example
package main
import (
"fmt"
"sync"
"time"
)
func main() {
var wg sync.WaitGroup
wg.Add(3)
go func(n int){
fmt.Println("n:", n)
t := time.Duration(n)*time.Second
time.Sleep(t)
wg.Done()
}(1)
go func(n int){
fmt.Println("n:", n)
t := time.Duration(n)*time.Second
time.Sleep(t)
time.Sleep(t)
wg.Done()
}(2)
go func(n int){
fmt.Println("n:", n)
t := time.Duration(n)*time.Second
time.Sleep(t)
wg.Done()
}(3)
wg.Wait()
fmt.Println("main exit...")
}
output:
n: 3
n: 1
n: 2
main exit...
注意
WaitGroup变量定义后,是不允许被拷贝的,即不允许作为函数参数或者赋值给其他变量。
Go 并发控制--WaitGroup的使用的更多相关文章
- Go并发控制--WaitGroup篇
目录 1. 前言 2. 使用WaitGroup控制 2.1 使用场景 2.2 信号量 1.3 WaitGroup 数据结构 2.3.1 Add () 方法 2.3.2 Wait() 2.3.3 Don ...
- Go并发控制--Channel篇
目录 1. 前言 2. 使用channel控制子协程 2.1 使用场景 2.2 总结 1. 前言 我们考虑这么一种场景,协程A执行过程中需要创建子协程A1.A2.A3-An,协程A创建完子协程后就等待 ...
- Go并发控制之sync.WaitGroup
WaitGroup 会将main goroutine阻塞直到所有的goroutine运行结束,从而达到并发控制的目的.使用方法非常简单,真心佩服创造Golang的大师们! type WaitGroup ...
- Go并发控制--context的使用
并发控制 Cancel Example 通过使用WithCancel可以取消一个或多个goroutine的执行,以实现对并发的控制. package main import ( "conte ...
- goroutine并发控制与通信
转发:https://mp.weixin.qq.com/s/ZlyQHfmoY1lzOoRgFSCOBw 开发go程序的时候,时常需要使用goroutine并发处理任务,有时候这些goroutine是 ...
- 并发控制--context篇
目录 1. 前言 2 Context 实现原理 2.1 接口定义 2.1 cancelCtx 2.1.1 Done()接口实现 2.1.2 Err()接口实现 2.1.3 cancel()接口实现 2 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- EntityFramework与TransactionScope事务和并发控制
最近在园子里看到一篇关于TransactionScope的文章,发现事务和并发控制是新接触Entity Framework和Transaction Scope的园友们不易理解的问题,遂组织此文跟大家共 ...
- MySQL MVCC(多版本并发控制)
概述 为了提高并发MySQL加入了多版本并发控制,它把旧版本记录保存在了共享表空间(undolog),当事务提交之后将重做日志写入磁盘(前提innodb_flush_log_at_trx_commit ...
随机推荐
- 2019-04-09-day028-OSI七层模型
内容回顾 概念 架构 : B/S C/S 硬件 : 网卡 :在计算机中 帮助我们完成网络通信 交换机 :在局域网内多台机器之间通信 路由器 :多个局域网之间的机器之间的通信 局域网 :一个区域内的多台 ...
- 【Python】数据库练习-1
三十四 数据库 1. 查看数据库命令 2. 使用某个数据库 3. 查看当前在哪个库 4. 查看当前数据库中有哪些表 5. 查询表中数据 6. 建库:cr ...
- C# 曲线控件 曲线绘制 实时曲线 多曲线控件 开发
Prepare 本文将使用一个NuGet公开的组件来实现曲线的显示,包含了多种显示的模式和配置来满足各种不同的应用场景,方便大家进行快速的开发系统. 在Visual Studio 中的NuGet管理器 ...
- Spring Boot 揭秘与实战 附录 - Spring Boot 公共配置
Spring Boot 公共配置,配置 application.properties/application.yml 文件中. 摘自:http://docs.spring.io/spring-boot ...
- 安装最新nginx
另外:http://nginx.org/en/linux_packages.html#mainline https://blog.csdn.net/hiram/article/details/5178 ...
- 【leetcode】26-RemoveDuplicatesfromSortedArray
problem RemoveDuplicatesfromSortedArray 注意数组为空的情况要首先考虑,并给出返回值: 注意也要同时给出新的数组的数值: 注意数组最后两个元素的处理: class ...
- Java IntelliJ IDEA 不能显示项目里的文件结构
方法一: 关闭IDEA, 然后删除项目文件夹下的.idea文件夹 重新用IDEA工具打开项目 方法二: 菜单:File -> Invalidate Caches / Restart
- HTML5的一些知识点
1.新增很多api,比如获取用户的地理位置的window.navigator.geoloaction,history,audio,video,canvas 2.websocket;websocket是 ...
- 外部javascript
- AE2
2.3缩放属性 ctrl+D 复制图层:这样可以吧这个图层的所有属性都复制过去 然后按着alt键,把图片替换掉 需要做一个倒计时(作业)(到1时做一个烟花效果) 问题:1.按着alt键,把图片替换掉. ...