社区
其他技术讨论专区
帖子详情
如果直接在main方法中读取会出现error,如果使用go receive方式程序正常
weixin_38049686
2019-09-20 10:35:30
...全文
137
11
打赏
收藏
如果直接在main方法中读取会出现error,如果使用go receive方式程序正常
[图片]
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38091120
2019-09-20
打赏
举报
回复
o,还得注意,关闭channel 的操作不能和读取channel 的操作在一个协程里
weixin_38095707
2019-09-20
打赏
举报
回复
这个代码一共创建了11个goroutine, send 10个, main 1个, 当send 10 个都运行完后, 唯一一个main goroutine就阻塞在接受通道的for循环那等待数据进来, 此时没有任何goroutine可以运行, 所以发生死锁
weixin_38111013
2019-09-20
打赏
举报
回复
多谢回答,现在明白些了, 另外我问一下, 1.range方式读取chan , 如果不手动close掉chan ,对于range来说,他会一直读取chan是吗? 我尝试过读取 ` ch := make(chan int) for n:= range ch{ fmt.Println(n) } ` 这样是会报错的。 2. 我能简单的把go协程理解成线程安全的队列吗?
weixin_38112805
2019-09-20
打赏
举报
回复
这两个不是一个问题,第一:for range 去读取channel 是一直去读取的,直到你的channel 关闭。这是正常情况。第二: ` ch := make(chan int) for n:= range ch{ fmt.Println(n) } `这种,创建并没有写入channel ,所以读取的时候,会直接报错deadlock。
weixin_38123446
2019-09-20
打赏
举报
回复
明白了,多谢回答
weixin_38128682
2019-09-20
打赏
举报
回复
多谢回答,你这思路真好。
weixin_38141078
2019-09-20
打赏
举报
回复
- 多谢回答,现在已经搞懂了,最开始没有明白 for range 跟channel组合玩法。
weixin_38068363
2019-09-20
打赏
举报
回复
因为如果放在main中,会从channel中读数据,没有读到就会死锁。
weixin_38074625
2019-09-20
打赏
举报
回复
@waini1110</a> #### 首先感谢回答,另外: ##### 对于读取来说应该是发现channel有数据就拿 ,没有数据就阻塞 ##### 对于发送来说向channel中存,存完阻塞,等待channel数据被取走后再存 ##### 现在我在main中不断读取channel, 假设channel不存在数据,他应该只是阻塞状态,为什么会提示 all goroutines are asleep - deadlock
weixin_38075910
2019-09-20
打赏
举报
回复
因为你只写了五个,五个写完之后,只有读的操作,没有写的操作,才会死锁。你写完之后关掉channel,就不会有这个问题
weixin_38080819
2019-09-20
打赏
举报
回复
抱歉,是十个
解决Python OpenCV
读取
IP摄像头(RTSP等)
出现
error
while decoding的问题
先来看一个简单的
读取
RTSP的示例
程序
import cv2 cap=cv2.VideoCapture("rtsp://admin:admin_123@172.0.0.0") ret,frame = cap.read() while ret: ret,frame = cap.read() cv2.imshow("frame",frame) if cv2.waitKey...
解决Python OpenCV
读取
视频并抽帧
出现
error
while decoding的问题
解决Python OpenCV
读取
视频抽帧
出现
error
while decoding的问题1. 问题2. 解决3. 源代码参考 1. 问题
读取
H264视频,抽帧视频并保存,报错如下; [aac @ 00000220b9a07fc0] Input buffer exhausted before END element found [h264 @ 00000220b9cd0500]
error
while decoding MB 20 45, bytestream -14 2. 解决 溯本求源
Golang
程序
报错:fatal
error
: all goroutines are asleep - deadlock
先分析可能发生阻塞的地方;【尤其是管道
读取
的地方】从主函数入手,依次分析并理清阻塞处的逻辑执行顺序;针对一块阻塞处,判断其写操作
会
不
会
在其后面,
程序
永远到不了;理清调用链逻辑,确定协程开启的地方。【开启协程的地方不
会
阻塞,立即往下执行】如果实在还无法执行,将你的代码post到评论区,让大家一起帮你解决!
golang -- 如何让
main
goroutine等一等
由于goroutine在创建过程时有一定开销,导致可能比
main
goroutine执行得要慢 介绍两种让
main
goroutine等一等的
方法
:sync.WaitGroup和初步认识channel
Go channel及其
使用
实例 【Go语言圣经笔记】
Channels 如果说goroutine是Go语言
程序
的并发体的话,那么channels则是它们之间的通信机制。一个channel是一个通信系统,它可以让一个goroutine通过它给另一个goroutine发送值信息。每个channel都有一个特定的类型,也就是channels可发送数据的类型。一个可以发送int类型数据的channel一般写为chan int。
使用
内置的make函数,我们可以创建一个channel: ch := make(chan int) // ch has type 'chan
其他技术讨论专区
474
社区成员
791,113
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章