```go
package main
import "fmt"
//需求 计算1到20000的2倍
//就是用一个go程inputer来产生数据,写入ch中,然后用多个go程从ch中读走数据,然后乘以2操作
//当某个go程把ch最后一个数据读走后,将quit通道写入数据
//主go程读走quit通道数据后,结束程序
func inputer(ch chan<- int) {
for i := 1; i<=20000; i++ {
ch <- i
}
close(ch)
}
func counter(ch <-chan int, quit chan<- bool) {
num, ok := <-ch
if !ok {
quit <- true
}
fmt.Println(num * 2)
}
func main (){
ch := make(chan int, 100)
quit := make(chan bool)
go inputer(ch)
for i := 0; i < 500; i++ {
go counter(ch, quit)
}
<- quit
}
```
可是最后程序报错`fatal error: all goroutines are asleep - deadlock!`,对于quit通道来说,它是一个无缓冲的同步通道,某个子go程写入数据后,其他子go程都应该阻塞,只有等着主go程读走quit中的数据后,然后就直接结束程序了,为什么有死锁现象?请大佬们解答一下。。:sob:
有疑问加站长微信联系(非本文作者)