var limit = make(chan int, 3)
var work = []func(){
func() { println("1"); time.Sleep(1 * time.Second) },
func() { println("2"); time.Sleep(1 * time.Second) },
func() { println("3"); time.Sleep(1 * time.Second) },
func() { println("4"); time.Sleep(1 * time.Second) },
func() { println("5"); time.Sleep(1 * time.Second) },
}
func main() {
for _, w := range work {
go func(w func()) {
limit <- 1
w()
<-limit
}(w)
}
select{}
}
5
3
4
1
2
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [select (no cases)]:
5 3 4 1 2 fatal error: all goroutines are asleep - deadlock! goroutine 1 [select (no cases)]: