如何实现可修改的队列?

时间:2013-06-25 15:04:13

标签: c# data-structures queue

我需要一个基于队列的非常专业的数据结构。我的想法是,我需要自己烘焙,但我想在开始之前向社区征求意见。

我需要的是一个主要的队列,其中每个队列项由生产者添加。要对队列项执行的工作必须是同步的(一次只允许处理一个项)。但是,这些项目是暂时的。当生产者去向队列添加工作时,如果队列已经有该生产者添加的工作,则队列项到期而不是从队列中删除它,该项将被生成器新项替换,因为我不希望这样制片人失去了在队列中的位置。

所以队列的规则是:

  1. 从队列中提取的项目是一次一个。这很简单,毕竟它是一个队列......

  2. 多个制作人可以同时将项目添加到队列中。

  3. 如果生产者已在队列中有项目,则队列项目将替换为生产者新项目。

  4. 将项目添加到队列时,无法从队列中提取项目(这样,在修改项目之前无法将其拉出)

  5. 生产者不一定需要在队列中有物品,每个生产者都可以延长一段时间而无需完成任何工作。

  6. 有关如何实施此类结构或满足需求的现有数据结构的任何想法将不胜感激!

1 个答案:

答案 0 :(得分:0)

  1. 使用BlockingCollection<T> Class。它允许一个线程使用GetConsumingEnumerable Method一次拉一个项目,多个生产者使用Add Method添加项目。

  2. 当生产者生成新项目时,不要将项目添加到队列中,而是添加到生产者本身。让制作人记住它产生的最后一个项目。如果生产者已经在队列中,请不要再次添加。

  3. 消费者将制作人队列出来并要求其制作最后一个项目。如果制作人在此期间制作了多个项目,那么它将仅记住最后一个项目,并且将跳过所有之前的项目。