Go语言中可以使用
sync.WaitGroup来实现并发任务的同步。sync.WaitGroup有以下几个方法:
| 方法名 | 功能 |
|---|---|
| (wg * WaitGroup) Add(delta int) | 计数器+delta |
| (wg *WaitGroup) Done() | 计数器-1 |
| (wg *WaitGroup) Wait() | 阻塞直到计数器变为0 |
sync.WaitGroup内部维护着一个计数器,计数器的值可以增加和减少。例如当我们启动了N 个并发任务时,就将计数器值增加N。每个任务完成时通过调用Done()方法将计数器减1。通过调用Wait()来等待并发任务执行完,当计数器值为0时,表示所有并发任务已经完成。package main import ( "fmt" "sync" "time" ) var wg sync.WaitGroup func foo(){ defer wg.Done() fmt.Println("foo") time.Sleep(time.Second*2) fmt.Println("foo end") } func bar(){ defer wg.Done() fmt.Println("bar") time.Sleep(time.Second*2) fmt.Println("bar end") } func main(){ start:=time.Now() wg.Add(2) //括号里面的值为执行并发程序的个数 go foo() go bar() wg.Wait() //通过调用Wait()来等待并发任务执行完,当计数器值为0时,表示所有并发任务已经完成。 fmt.Println("程序结束,运行时间为",time.Now().Sub(start)) }
本文介绍如何使用Go语言中的sync.WaitGroup实现并发任务的同步。通过维护一个可增减的计数器,在启动并发任务时增加计数器,并在每个任务完成后通过调用Done()方法减少计数器,最后通过Wait()方法等待所有并发任务完成。
510

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



