github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/talks/2012/10things/9.go (about) 1 // +build OMIT 2 3 package main 4 5 import ( 6 "fmt" 7 "time" 8 "math/rand" 9 ) 10 11 func waiter(i int, block, done chan struct{}) { 12 time.Sleep(time.Duration(rand.Intn(3000)) * time.Millisecond) 13 fmt.Println(i, "waiting...") 14 <-block // HL 15 fmt.Println(i, "done!") 16 done <- struct{}{} 17 } 18 19 func main() { 20 block, done := make(chan struct{}), make(chan struct{}) 21 for i := 0; i < 4; i++ { 22 go waiter(i, block, done) 23 } 24 time.Sleep(5 * time.Second) 25 close(block) // HL 26 for i := 0; i < 4; i++ { 27 <-done 28 } 29 } 30 // endmain OMIT