goroutine死锁问题

xiaoxi2017 · · 1442 次点击
这个看你怎么理解了。 所以我说的是似乎,并没有说就是。 按照正常的理解,既然是一个通道,当然是发送接收而已,没那么多复杂的。同一个协程,我发了再收,应该也说得通,逻辑不矛盾。但是实际就是不行,和常规理解不同。 你当然可以说GO就是这样规定的,必须一个协程发,另一个协程收,没毛病。但这确实是不大合乎常规的理解。并且,显然,这里看出,带缓冲区和不带缓冲区,都是通道,存在一个很大区别。不注意,很可能犯这个错误。 所以,这个例子看出,尽量用带缓冲区的channel,哪怕是长度是1的缓冲区,也更不容易出错。按照常规理解,长度是1的缓冲区,就是一次只能发一个,实际就是和不带缓冲区的意思一样,当然这个是常规理解。但GO就是不按常规理解来,这个也不是GO的错。但这样,似乎欠缺点什么,至少不够友好。
#11
更多评论
因为你没异步 所以你的读和写只能按顺序。
#2