为什么加了done<-true就能通知外面打印完了呢

来源:6-2 使用Channel等待任务结束

寻曜

2021-08-15 16:39:22

为什么加了done<-true就能通知外面打印完了呢?是通过什么方式通知的呀?为什么加了done<-true主程序就会等着协程打印完毕呢?

还有往done放数据的时候done<-true还没有人收,收数据<-done是在后面才执行的,为什么不报错呢,如下图:

http://img.mukewang.com/climg/6118d23109d5a8f808400204.jpg

写回答

1回答

ccmouse

2021-08-17

代码出现在前边并不表明它一定先执行。

这里done<-true是一个双向的约定。我的worker做完事情就说done<-true。

这里暂时没有人接收这个true,所以goroutine被挂起(block) ,由main函数06:53处:

http://img.mukewang.com/climg/611b99c1090445bc22840768.jpg

我们接收了这个true,main函数就知道里面的worker都完成了。

0

0 学习 · 1399 问题

查看课程