sync_waitgroup.go 527 B

123456789101112131415161718192021222324252627
  1. package main
  2. import (
  3. "fmt"
  4. "sync"
  5. "time"
  6. )
  7. const N = 10 // 任务数量
  8. func main() {
  9. var wg sync.WaitGroup
  10. for i := 1; i <= N; i++ {
  11. wg.Add(1) // 计数器 +1
  12. go func(id int) {
  13. defer wg.Done() // 任务完成时 -1
  14. fmt.Printf("task %d start\n", id)
  15. time.Sleep(time.Duration(id*100) * time.Millisecond) // 模拟耗时
  16. fmt.Printf("task %d done\n", id)
  17. }(i)
  18. }
  19. fmt.Println("main: waiting for all tasks...")
  20. wg.Wait() // 阻塞直到计数器为 0
  21. fmt.Println("main: all tasks completed, exit")
  22. }