Golang::WaitGroup 等待所有goroutine退出

喜欢ヅ旅行 2022-05-21 02:57 344阅读 0赞

简介

waitgroup类似于的信号量,用于等待所有的goroutine退出,基本的操作包括
add(int) 增加信号的值,add的参数应该都为正数 ,done() 减少信号的值,相当于add(-1) ,wait() 等待信号量值为0,等待期间会一直阻塞

code

  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. "time"
  6. )
  7. var waitGroutp = sync.WaitGroup{}
  8. func goroutine1() {
  9. time.Sleep(time.Second * 3)
  10. waitGroutp.Done()
  11. fmt.Println("goroutine1退出")
  12. }
  13. func goroutine2() {
  14. time.Sleep(time.Second * 8)
  15. waitGroutp.Done()
  16. fmt.Println("goroutine2退出")
  17. }
  18. func goroutine3() {
  19. time.Sleep(time.Second * 1)
  20. waitGroutp.Done()
  21. fmt.Println("goroutine3退出")
  22. }
  23. func goroutine4() {
  24. time.Sleep(time.Second * 2)
  25. waitGroutp.Done()
  26. fmt.Println("goroutine4退出")
  27. }
  28. func main() {
  29. fmt.Println("waitgroup测试")
  30. go goroutine1()
  31. go goroutine2()
  32. go goroutine3()
  33. go goroutine4()
  34. waitGroutp.Add(4)
  35. //waitGroutp.Add(5) //add 大于开goroutie数目会死锁,
  36. //waitGroutp.Add(2) //少了会panic sync: negative WaitGroup counter
  37. waitGroutp.Wait()
  38. time.Sleep(time.Second * 2)
  39. fmt.Println("所有goroutine已经退出")
  40. }

发表评论

表情:
评论列表 (有 0 条评论,344人围观)

还没有评论,来说两句吧...

相关阅读

    相关 创建进程并等待退出

    在命令行里,你敲完一个命令后,一般是这个命令执行完毕后你才获得控制台。在360的软件管家里面也有这种效果(软件升级时)。如果你要实现这种效果,一般就需要创建进程并等待其退出的函