gpt4 book ai didi

c# - 偷看后从并发队列中删除元素的模式

转载 作者:行者123 更新时间:2023-12-05 07:26:48 26 4
gpt4 key购买 nike

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

可以有非唯一消费者。即不止一个消费者可能对同一消息感兴趣。因此,非独特消费者就像同类 worker 。

也有独特的消费者,因为他们处理的是队列,所以他们假设消息是有序的。

问题:

当消费者 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 种并发语义?

还有其他方法可以对问题建模吗?

最佳答案

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

没有任何内置或常用的东西来帮助解决这个问题。只需自己锁定即可。

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

关于c# - 偷看后从并发队列中删除元素的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54264091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com