Golang panic:WaitGroup is reused before previous Wait has returned
func BencmarkWg(b *testing.B){
for i:=0;i< b.N;i++{
wg()
}
}
func wg() {
var wg sync.WaitGroup
wg.Add(1)
go func() {
wg.Wait()
}
go func() {
wg.Done()
}
wg.Add(1)这一行会触发错误
}
原理:
根据WaitGroup的源码:
调用Wait之后,wait内部会进行waiter的检查和等待,当发现waiter为0,会进入下一步,如果在进入下一步之前外部又调用了Add,即waiter的值会变成非0,则会触发该问题
。。。。
runtime_Semacquire(unsafe.Pointer(semap))///等待waiter变成0,即之前提交的所有协程执行完
if *statep != 0 { //发现又不是0,即在这一步之前,外部调用了Add
panic("sync:WaitGroup is reused before previous Wait has returned")
}
。。。。。
总结:
1.wg本身是可以服用,即Wait()完后,再继续add,再wait()
2.wait()的过程中,不能Add,即wait()和add不能并发
Golang panic:WaitGroup is reused before previous Wait has returned相关推荐
- golang报错: WaitGroup is reused before previous Wait has returned
使用WaitGroup时,大概代码: package mainimport ("fmt""time""sync" ) var wg sync ...
- WaitGroup is reused before previous Wait has returned
学习Go语言时,写了一个Go的代码,但是在执行过程中出现WaitGroup is reused before previous Wait has returned import ("fmt& ...
- golang panic的错误回收和简单的使用场景
golang panic的错误回收和简单的使用场景 代码示例 package mainimport("fmt" )func main(){_,err:=deferPanic(8,0 ...
- Golang中WaitGroup使用的一点坑
Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...
- Golang sync.WaitGroup 简介与用法
1.简介 sync.WaitGroup 用于阻塞等待一组 Go 程的结束.主 Go 程调用 Add() 来设置等待的 Go 程数,然后该组中的每个 Go 程都需要在运行结束时调用 Done(), 递减 ...
- golang panic和recover 捕获异常
func panic(interface{})和func recover() interface{}是Golang中用于错误处理的两个函数. panic的作用就是抛出一条错误信息,从它的参数类型可以看 ...
- golang的WaitGroup
WaitGroup 用于等待一组 goroutine 结束,有时候写golang测试程序的时候,在main函数创建一个协程,协程没跑完main就执行完了,或者在main最后价格睡眠,但使用WaitGr ...
- Golang中WaitGroup、Context、goroutine定时器及超时学习笔记
原文连接:http://targetliu.com/2017/5/2... 好久没有发过文章了 - -||,今天发一篇 golang 中 goroutine 相关的学习笔记吧,以示例为主. WaitG ...
- golang基础-WaitGroup、kafka消费者
WaitGroup WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执 ...
最新文章
- 通过tinyxml解析百度热词榜单
- 前后端同学,必会的Linux常用基础命令
- 改变跳转页面 英文_如何高效阅读英文文献?你可以试试它 | 知云文献翻译
- java 文件随机读取_Java 实现文件随机读写-RandomAccessFile
- MVC之ActionFilterAttribute自定义属性
- ear的英语怎么念_ear英语怎么读
- jacoco入门_Android jacoco 代码覆盖率测试入门
- android活动中的变量,在不同的活动中保持变量值Android Studio
- 如何使用虚拟实验室建设思科IPS***防御课程的实验环境
- 将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中
- Python格式化字符串f-string概览
- Erlang之ETS,DETS入门
- 关于Win11家庭版安装Ansys2021R1遇到的问题
- 经典《像素鸟》游戏,难道你不想自己动手开发一个嘛(附源码免费下载)
- python 批量转换xls to xlsx,出现pywintypes.com_error: (-2147417848, ‘被调用的对象已与其客户端断开连接)’的问题处理
- 《数据结构》专题10--最短路
- 多线程使用场景(经典必看)
- Linux内核模块管理
- 计算机组成原理勘误,《计算机组成原理》勘误表.doc
- 最新版Visual Studio Code下载及远程连接服务器(很详细哦)
热门文章
- 怎样编写java程序
- unicode计算机通用解码语言
- SNS网站LinkedIn的Java架构技术
- cannot be resolved to a type 错误解决
- Flash Builder4.7极其简单破解方法-三步搞定
- C# int uint long ulong byte sbyte float double decimal 范围,及类型!
- 海贼王83名刀:无上大快刀12工、大快刀21工、良快刀50工
- Excel-VBA:“银行家舍入” 与“国际标准的四舍五入”
- 2022年国内私网IP地址
- mybatis plus 格式话_MyBatisPlus学习整理(二)