Golang中国

主进程同时启动了3个goroutine,一个接受tcp数据,两个在读channel,任何一个goroutine出了异常退出时,另两个也要一起退出,怎么实现比较好?
谢谢

6 回复
tomine
#1 tomine • 2017-05-16 12:39

用context包行不行?

bigbear
#2 bigbear • 2017-05-18 13:07

创建第四个channel, 将这个channel作为异常的信号发送通道.
开启你的三个goruntine时, 把第四个channel传递过去. 并且在这三个goruntine里面用select读取2个channel.
在任何一个gorutnine中有异常是, close(第四个channel), 其他2个goruntine中都可以收到信号. 然后做相关处理.

oneofwower
#3 oneofwower • 2017-05-18 15:18

2楼正解,请使用channel来通信

baiyuxiong
#4 baiyuxiong • 2017-05-29 22:54

tcp正在read的时候,是卡死协程的,select没用。

631768417
#5 631768417 • 2017-05-30 16:24

…..你的4楼回复,让我严重怀疑。。你理解别人的意思没有。。。你不会把read也放select体内吗

ichenq
#6 ichenq • 2017-05-30 20:28

回复4楼

虽然Read是阻塞的,
但是处理其它goroutine的退出的时候,可以Close这个Conn对象,然后Read就返回error了

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。