我有一个生产者和多个消费者。我正在使用并发队列。我正在使用 C#,但我认为我的问题是语言不可知论。
可以有非唯一的消费者。即多个消费者可能对同一消息感兴趣。因此,非独特的消费者就像独一无二的工人。
也有独特的消费者,因为他们正在处理一个队列,他们假设消息中的顺序。
问题:
当消费者Guid-1-worker-1
查看队列并为自己找到一条消息 M1 时,它会将其出列。但是,由于并发性,消息 M1 可能已被 worker 出列Guid-1-worker-2
。此时,出队的消息Guid-1-worker-1
是 for Guid-2
。Guid-2
只有一名工作人员,因此,将消息放回队列无济于事,因为它破坏了消息的顺序。
我想要的是,如果我查看了一条消息,那么只有我应该能够将它出列。现在,我想我必须在lock
这里使用。但简单List
会起作用,而不是ConcurrentQueue
同样有效。
是否有任何其他数据结构提供:Peek-Check-Dequeue
一种并发语义?
有没有其他方法来模拟问题?