WaitGroup并发控制原理及底层源码实现

本文详细阐述了Go语言中的WaitGroup并发控制机制,包括实现原理,底层源码分析,并重点讲解了CAS(CompareAndSwap)在WaitGroup中的应用,以及两个示例展示了CAS操作的工作流程。

WaitGroup并发控制原理及底层源码实现

在这里插入图片描述

1.1实现原理

在这里插入图片描述

1.2底层源码

在这里插入图片描述

type WaitGroup struct {
   
   
   noCopy noCopy

   // 64-bit value: high 32 bits are counter, low 32 bits are waiter count.
   // 64-bit atomic operations require 64-bit alignment, but 32-bit
   // compilers only guarantee that 64-bit fields are 32-bit aligned.
   // For this reason on 32 bit architectures we need to check in state()
   // if state1 is aligned or not, and dynamically "swap" the field order if
   // needed.
   state1 uint64
   state2 uint32
}
func (wg *WaitGroup) Add(delta int) {
   
   
   statep, semap := wg.state()
   if race.Enabled {
   
   
      _ = *statep // trigger nil deref early
      if delta < 0 {
   
   
         // Synchronize decrements with Wait.
         race.ReleaseMerge(unsafe.Pointer(wg))
      }
      race.Disable()
      defer race.Enable()
   }
   //把delta左移32位累加到state,即累加到counter中
   state := atomic.AddUint64(statep, uint64(delta)<<32) 
   v := int32(state >> 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值