阻塞队列是如何阻塞的?

4

我理解为BlockingCollection使用的是非忙等待方式,即在新项目通知或回调中进行。因此,我不明白它是如何阻塞的,但我认为我可能混淆了被阻塞的线程和对共享对象的阻塞访问?

1个回答

1
这是一个很好的解释:

https://blogs.msdn.microsoft.com/toub/2006/04/12/blocking-queues/

基本上,当您尝试DeQueue时,会发生阻塞。EnQueue是线程安全的,而DeQueue将阻塞(阻塞调用DeQueue的线程),直到有东西可获取为止。
好处是您不必关心(也不应该关心)阻塞是如何实现的。

因此,消费者在出队时会阻塞,这会使线程停滞不前?但这并不会使用太多的 CPU,只是占用了一个线程? - user3572680
如有疑问,请测量 - 我怀疑阻塞不会消耗比处理项更多的资源。结果因人而异! - n8wrl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接