双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就会卡在这一行发送处。

0
0

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程