一、什么是WaitGroup?
WaitGroup等待一组goroutines完成。
主goroutine调用Add来设置要等待的goroutine的数量。然后每个goroutines运行并在完成时调用Done。同时,Wait可以用来阻塞,直到所有goroutines完成。
WaitGroup在第一次使用后不能被复制。
二、WaitGroup 结构体
type WaitGroup struct {
noCopy noCopy
state1 [3]uint32
}
noCopy:防止复制
state1:这里包含3个含义,在32/64位编译器中有不同的处理方式(WaitGroup.state())
count:计数器
waiter:等待goroutine数量
sema:信号量
三、方法解析:
1.state - 解析WaitGroup.state1
func (wg *WaitGroup) state() (statep *uint64, semap *uint32) {
if uintptr(unsafe.Pointer(&wg.state1))%8 == 0 {//64位编译器
return (*uint64)(unsafe.Pointer(&wg.state1)), &wg.state1[2]
} else { //32位编译器
return (*uint64)(unsafe.Pointer(&wg.state1[

本文详细探讨了Go语言中的sync.WaitGroup,包括其功能、结构体组成以及关键方法如Add、Done和Wait的工作原理。WaitGroup用于等待一组并发执行的goroutines完成,通过Add设置初始计数,Done减少计数,而Wait则在计数为零时释放等待。
最低0.47元/天 解锁文章
541

被折叠的 条评论
为什么被折叠?



