我正在寻找一种可靠的方法来确保 Go 中的空通道不会阻止我的执行。我必须以特定顺序(优先级的种类)遍历多个通道,一旦我找到其中包含项目的通道,请阅读其中的一个。目前我以类似的方式做一些事情:if len(myChannel) > 0 { // Possible issue here: length could have changed to 0 making this blocking elm := <- myChannel return elm}从理论上讲,这可能会导致等待时间过长,而不同的频道可能有准备“服务”的项目。有关如何改进的任何建议?我可以在通道中使用互斥锁,但感觉有更好的解决方案,尽管我不确定如何。
2 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
我不确定这是否真的回答了“是否有可靠的方法来确保 Go 通道不会阻塞”的问题。在 OP 的用例中,如果 recv 阻塞 / 只要集合中没有其他通道不会阻塞 / 就可以了,这就是公认的解决方案所实现的。这与“确保 recv 不会阻塞”不同,我认为无法绕过 OP 指出的竞争条件的基本限制。
- 2 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消