新手问题,关于exitChan的问题

m0_38130725 2020-01-06 11:50:57
图一代码是网课的老师写的,图二是我写的。 老师在send的go程中与recv的go程中都加了exitChan,然后在main函数中通过遍历拿出exitChan的值来退出。而我只在recv的go程加了exitChan。我们运行的结果是一样的。 请问为什么老师要在send中加exitChan,有什么意义吗。是老师写的对还是我写的对呢。求大佬指教,谢谢!
...全文
69 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈gogo 2020-02-18
  • 打赏
  • 举报
回复
怪不得,终于找到答案了
m0_38130725 2020-01-09
  • 打赏
  • 举报
回复
引用 1 楼 qybao的回复:
你要明白你的程序中通道的作用,目的是为了阻塞主线程,让go程都执行完毕主线程才继续
所以你老师的程序和你的程序都没问题
你老师的程序是在main里主线程等待send和recv的exitChan,exitChan的通道缓存为2,所以必须收到2个数据阻塞才能解开,所以send和recv都发送一次数据。(当然,recv依赖于send的ch通道的数据,也就是保证先send后recv,这个就不多说了)
而你的程序是main主线程只等待readData的exitChan,exitChan的通道缓存为1,所以只需要一个数据就可以了。(当然,readData依赖于writeData的intChan通道的数据,也就是保证先writeData后readData,这个也不多说了)
懂了,受益匪浅,多谢大佬
qybao 2020-01-07
  • 打赏
  • 举报
回复
你要明白你的程序中通道的作用,目的是为了阻塞主线程,让go程都执行完毕主线程才继续
所以你老师的程序和你的程序都没问题
你老师的程序是在main里主线程等待send和recv的exitChan,exitChan的通道缓存为2,所以必须收到2个数据阻塞才能解开,所以send和recv都发送一次数据。(当然,recv依赖于send的ch通道的数据,也就是保证先send后recv,这个就不多说了)
而你的程序是main主线程只等待readData的exitChan,exitChan的通道缓存为1,所以只需要一个数据就可以了。(当然,readData依赖于writeData的intChan通道的数据,也就是保证先writeData后readData,这个也不多说了)

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧