首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在窥视后从并发队列中删除元素的模式

用于在窥视后从并发队列中删除元素的模式
EN

Stack Overflow用户
提问于 2019-01-19 12:35:06
回答 1查看 125关注 0票数 3

我有一个生产者和多个消费者。我正在使用ConcurrentQueue。我正在使用C#,但我认为我的问题是语言不可知论。

可以有非唯一的消费者。即一个以上的消费者可以对同一消息感兴趣。因此,非独一无二的消费者就像独一无二的工人。

还有一些独特的消费者,因为它们处理的是队列,所以它们假定消息中的顺序。

问题:

当消费者Guid-1-worker-1窥视队列并找到自己的消息M1时,它会将其出队。但是,由于并发性,消息M1可能已由worker Guid-1-worker-2出队。此时,由Guid-1-worker-1出队的消息是针对Guid-2的。Guid-2只有一个工作进程,因此,将消息放回队列中没有任何帮助,因为它打乱了消息的顺序。

我想要的是,如果我看过一条消息,那么应该只有我能够将其出队。现在,我想我必须在这里使用lock。但是,简单的List也可以代替ConcurrentQueue

有没有其他的数据结构可以提供:Peek-Check-Dequeue类型的并发语义?

有没有其他方法来模拟这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 18:34:31

Peek-Check-Dequeue强制使用某种锁。要么你锁定自己的数据结构来执行锁定(它需要锁定,然后调用你的代码执行检查,然后解锁)。

没有任何内置的或常用的东西来帮助实现这一点。你自己上锁就行了。

如果这类操作的频率非常高(每秒数百万次),那么锁定开销就会成为一个问题。在这一点上,你需要一个更聪明的设计。这将是更多的工作和更多的bug风险。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54264091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档