channel通信的问题

qymiui · · 1016 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```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:

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1016 次点击  
加入收藏 微博
3 回复  |  直到 2020-02-06 10:07:04
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传