为了账号安全,请及时绑定邮箱和手机立即绑定

确保 Go 通道不会阻塞的可靠方法

确保 Go 通道不会阻塞的可靠方法

Go
跃然一笑 2021-09-10 16:20:34
我正在寻找一种可靠的方法来确保 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 指出的竞争条件的基本限制。


查看完整回答
反对 回复 2021-09-10
  • 2 回答
  • 0 关注
  • 153 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信