老师你好,goroutine的问题

来源:11-3 使用Channel进行树的遍历

鱼右

2018-06-05

http://img.mukewang.com/szimg/5b1684c50001fc9306160222.jpg老师这里的node一直送数据,没有人收,为什么放到go func(){}就不会deadlock,单独就会出现deadlock呢?

写回答

3回答

ccmouse

2018-06-11

非常抱歉可能当时那两天正好忙了一下没看到,然后问题有了回答以后,反而不出现在待解答里面了。

这里呢,首先假设我们收到返回值的人会从out里面不断收数据。但是如果不使用go func的话,out<-node这行就会等人收,但此时函数还没有返回,外面从out收数据的代码还没执行到,形成了死锁。

那么这里有了go func。go func这一大段只是开了一个goroutine“并行”执行,而TraverseWithChannel立刻返回,那么外面收数据的代码就被执行到,这个channel的路就通了。

1
4
鱼右
回复
ccmouse
为什么这里,不加close会deadlock呢,?
2018-06-12
共4条回复

鱼右

提问者

2018-06-11

老师 在嘛 马上一周了 囧


0
0

鱼右

提问者

2018-06-07

老师看到以后 ,可以回答一下嘛 多谢

0
0

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

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

5995 学习 · 1909 问题

查看课程