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相关推荐

  1. golang报错: WaitGroup is reused before previous Wait has returned

    使用WaitGroup时,大概代码: package mainimport ("fmt""time""sync" ) var wg sync ...

  2. WaitGroup is reused before previous Wait has returned

    学习Go语言时,写了一个Go的代码,但是在执行过程中出现WaitGroup is reused before previous Wait has returned import ("fmt& ...

  3. golang panic的错误回收和简单的使用场景

    golang panic的错误回收和简单的使用场景 代码示例 package mainimport("fmt" )func main(){_,err:=deferPanic(8,0 ...

  4. Golang中WaitGroup使用的一点坑

    Golang中WaitGroup使用的一点坑 Golang 中的 WaitGroup 一直是同步 goroutine 的推荐实践.自己用了两年多也没遇到过什么问题.直到一天午睡后,同事扔过来一段奇怪的 ...

  5. Golang sync.WaitGroup 简介与用法

    1.简介 sync.WaitGroup 用于阻塞等待一组 Go 程的结束.主 Go 程调用 Add() 来设置等待的 Go 程数,然后该组中的每个 Go 程都需要在运行结束时调用 Done(), 递减 ...

  6. golang panic和recover 捕获异常

    func panic(interface{})和func recover() interface{}是Golang中用于错误处理的两个函数. panic的作用就是抛出一条错误信息,从它的参数类型可以看 ...

  7. golang的WaitGroup

    WaitGroup 用于等待一组 goroutine 结束,有时候写golang测试程序的时候,在main函数创建一个协程,协程没跑完main就执行完了,或者在main最后价格睡眠,但使用WaitGr ...

  8. Golang中WaitGroup、Context、goroutine定时器及超时学习笔记

    原文连接:http://targetliu.com/2017/5/2... 好久没有发过文章了 - -||,今天发一篇 golang 中 goroutine 相关的学习笔记吧,以示例为主. WaitG ...

  9. golang基础-WaitGroup、kafka消费者

    WaitGroup WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组.团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执 ...

最新文章

  1. 通过tinyxml解析百度热词榜单
  2. 前后端同学,必会的Linux常用基础命令
  3. 改变跳转页面 英文_如何高效阅读英文文献?你可以试试它 | 知云文献翻译
  4. java 文件随机读取_Java 实现文件随机读写-RandomAccessFile
  5. MVC之ActionFilterAttribute自定义属性
  6. ear的英语怎么念_ear英语怎么读
  7. jacoco入门_Android jacoco 代码覆盖率测试入门
  8. android活动中的变量,在不同的活动中保持变量值Android Studio
  9. 如何使用虚拟实验室建设思科IPS***防御课程的实验环境
  10. 将内存FFFF:0 ~ FFFF:F 内存单元中的数据复制到 0:200 ~ 0:20F 中
  11. Python格式化字符串f-string概览
  12. Erlang之ETS,DETS入门
  13. 关于Win11家庭版安装Ansys2021R1遇到的问题
  14. 经典《像素鸟》游戏,难道你不想自己动手开发一个嘛(附源码免费下载)
  15. python 批量转换xls to xlsx,出现pywintypes.com_error: (-2147417848, ‘被调用的对象已与其客户端断开连接)’的问题处理
  16. 《数据结构》专题10--最短路
  17. 多线程使用场景(经典必看)
  18. Linux内核模块管理
  19. 计算机组成原理勘误,《计算机组成原理》勘误表.doc
  20. 最新版Visual Studio Code下载及远程连接服务器(很详细哦)

热门文章

  1. 怎样编写java程序
  2. unicode计算机通用解码语言
  3. SNS网站LinkedIn的Java架构技术
  4. cannot be resolved to a type 错误解决
  5. Flash Builder4.7极其简单破解方法-三步搞定
  6. C# int uint long ulong byte sbyte float double decimal 范围,及类型!
  7. 海贼王83名刀:无上大快刀12工、大快刀21工、良快刀50工
  8. Excel-VBA:“银行家舍入” 与“国际标准的四舍五入”
  9. 2022年国内私网IP地址
  10. mybatis plus 格式话_MyBatisPlus学习整理(二)