Guest User

Untitled

a guest
Feb 24th, 2018
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.57 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4. "fmt"
  5. "time"
  6. )
  7.  
  8. func main() {
  9. done := make(chan struct{})
  10.  
  11. go func() {
  12. time.Sleep(3 * time.Second)
  13. fmt.Println("producer task done!")
  14. close(done) // 所有阻塞的goroutine都能收到done信号, 可以当做cond.Broadcast使用
  15. // done <- struct{}{} // 只有一个goroutine能收到done信号
  16. }()
  17.  
  18. for i := 0; i < 4; i++ {
  19. go func(i int) {
  20. fmt.Printf("[%d] waiting for task done..\n", i)
  21. <-done
  22. fmt.Printf("[%d] task already done\n", i)
  23. return
  24. }(i)
  25. }
  26.  
  27. <-done
  28. time.Sleep(time.Second)
  29. fmt.Println("main goroutine exit...")
  30. }
Add Comment
Please, Sign In to add comment