以下代码会deadlock
为什么?因为push和pull永远不可能同时发生,这就是阻塞channel的不当用法。
怎么解决呢?可以这样:
通过在另一个协程中run push代码,使得channel的生产和消费可以同时对接,正常的阻塞使用方式。
还可以这样:
给channel加一个buffer,只要buffer没用尽,大家就不用阻塞。
“以为加buffer就不会阻塞了吗?没有数据pull的时候就会阻塞啊”——这个简单啊:
这是非阻塞的pull channel
这是带超时的pull channel
以上,很基础,希望有用。