1

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

我需要的主要是一个队列,其中每个队列项都由生产者添加。队列项上要完成的工作必须是同步的(一次只允许处理一项)。但是,这些项目是临时的。当生产者去向队列添加工作时,如果队列已经有该生产者添加的工作,则队列项目过期,而不是将其从队列中删除,该项目将替换为生产者的新项目,因为我不希望那样生产者失去他们在队列中的位置。

所以队列的规则是:

  1. 从队列中拉出的项目是一次一个。这很简单,毕竟是一个队列……

  2. 多个生产者可以同时将项目添加到队列中。

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

  4. 将项目添加到队列时无法从队列中拉出项目(这是为了使正在修改的项目在被修改之前无法拉出)

  5. 生产者不一定需要在队列中有项目,每个生产者可以在没有工作的情况下延长一段时间。

任何关于如何实现这种结构或适合需要的现有数据结构的想法将不胜感激!

4

1 回答 1

0
  1. 使用BlockingCollection<T> 类它允许一个线程使用GetConsumingEnumerable 方法一次提取一个项目,并允许多个生产者使用Add 方法添加项目。

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

  3. 消费者使生产者出队,并要求它提供生产的最后一个项目。如果生产者同时生产了多个项目,它将只记住最后一个,并且将跳过所有以前的项目。

于 2013-06-25T15:20:31.643 回答