双channel
来源:11-2 使用Channel等待任务结束

weixin_慕沐2155417
2022-08-05
main协程与某协程(假设是协程go 1)通信,开了两条通道,一个in通道:main->go1,另一个done:go1->main。首先是main向通道in发东西,go1向通道in拿东西,紧接着go1向通道done发东西,main没拿,紧接着继续向通道in发东西,我认为是可行的,go1再一次从通道in拿东西,紧接着向通道done发东西,这个时候因为通道done还有东西没拿,才会触发阻塞错误。
但是我调试好像发现第二次根本没有任何一个协程能成功往通道in发东西
写回答
1回答
-
ccmouse
2022-08-15
因为channel (非buffered channel)的收发是同步的。go1向done发东西,必须有人从done收东西,如果main不收,那go1就会卡在这一行发送处。
00
相似问题