当前位置:   article > 正文

Go并发控制之sync.WaitGroup

sync.waitgroup

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时,表示所有并发任务已经完成。

  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. "time"
  6. )
  7. var wg sync.WaitGroup
  8. func foo(){
  9. defer wg.Done()
  10. fmt.Println("foo")
  11. time.Sleep(time.Second*2)
  12. fmt.Println("foo end")
  13. }
  14. func bar(){
  15. defer wg.Done()
  16. fmt.Println("bar")
  17. time.Sleep(time.Second*2)
  18. fmt.Println("bar end")
  19. }
  20. func main(){
  21. start:=time.Now()
  22. wg.Add(2) //括号里面的值为执行并发程序的个数
  23. go foo()
  24. go bar()
  25. wg.Wait() //通过调用Wait()来等待并发任务执行完,当计数器值为0时,表示所有并发任务已经完成。
  26. fmt.Println("程序结束,运行时间为",time.Now().Sub(start))
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/850353?site
推荐阅读
相关标签
  

闽ICP备14008679号