这是对上一个具有相似名称的线程的后续操作。
它有一个公认的答案,但该答案并不能真正回答问题。从那个线程,这里是用例:
if len(myChannel) > 0 {
// Possible issue here: length could have changed to 0 making this blocking
elm := <- myChannel
return elm
}
OP 称其为“可能的问题”,但它是一个确定的问题:一种竞争条件,其中另一个消费者可能从 if 条件的评估和两个语句的执行之间的通道中提取了一个值。
现在,我们被告知 Go Way 更倾向于通道而不是互斥锁,但在这里,如果不将互斥锁和通道配对在一起,并使用我们新的并发数据类型而不是通道。
可以吗?真的没有办法通过提前检查空间来可靠地确保 recv 不会阻塞吗?(与 Java 中的 BlockingQueue.poll() 或其他基于队列的消息传递 IPC 设施中的类似设施相比...)
ibeautiful
慕丝7291255
相关分类