[GO]sync.WaitGroup作用及使用
sync.WaitGroup是被设计用来实现同步问题的一个函数。
WaitGroup维护一个计数器,初始为0。
它有三个方法来对计数器进行操作或判断:Add(), Done(), Wait()
1.Add(n) 把计数器设置为n
2.Done() 每次把计数器-1
3.wait() 会阻塞代码的运行,直到计数器地值减为0。
给出雨痕大佬的例子:
func main() {
wg := new(sync.WaitGroup)
wg.Add(2)
go func() {
defer wg.Done()
for i := 0; i < 6; i++ {
println(i)
if i == 3 {
runtime.Gosched()
}
}
}()
go func() {
defer wg.Done()
println("Hello, World!")
}()
wg.Wait()
}
这里的运行结果如下:
0
1
2
3
Hello, World!
4
5
其中runtime.Gosched()函数的作用是退出当前的go协程,将其暂时挂起等待下次调用。
函数将会先设置计数器为2,进入第一个匿名函数,循环4次后触发Goshced函数挂起当前函数,进入下一个匿名函数,打印Hello,world后触发defer wg.Done(),将计数器-1,此时调用Wait()函数,由于计数器不为0,进入挂起函数,继续打印45,之后触发defer wg.Done(),退出匿名函数后,满足Wait()条件,退出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix