具有插入优先级的非优先级队列

时间:2011-12-08 10:41:34

标签: c# .net multithreading priority-queue

谷歌对这个搜索词感到头疼。

我需要一个线程安全机制来实现以下功能。 插入优先级超过读取的线程安全列表。

我需要始终能够将一条消息(比方说)插入队列(或其他),偶尔也能读取。 所以阅读,不能,干扰插入。

感谢。

编辑:阅读也意味着清除红色部分。

EDIT2:也许有帮助,有一位读者和一位作家。

EDIT3:案例场景:每秒10次插入,持续1分钟(或者使用软件所在的硬件可以达到最大值)。然后插入暂停1分钟。然后在2秒内插入20次(或使用软件所在的硬件可以最大化)30秒。然后暂停30秒。然后暂停用于最大读数。我不知道我是否足够清楚。显然不是。 (PS:我不知道何时会发生暂停,那就是问题)。最大值插入延迟:Enqueue或Add方法完成的时间。

附加:使用带有TryGetValue和TryRemove的AddOrUpdate的ConcurrentDictionary可以使用吗?

1 个答案:

答案 0 :(得分:1)

将队列构造为对象的链接列表。保持对队列的头部和尾部的引用。请参阅下面的伪代码,粗略地讲述了这个想法

QueueEntity Head;
QueueEntity Tail

class QueueEntity
{
       QueueEntity Prev;
       QueueEntity Next;
       ...   //queue content; 
}

and then do this:

//Read
lock(Tail)
{
  //get the content
  Tail=Tail.Prev;
}

//Write
lock(Head)
{
   newEntity = new QueueEntity();
   newEntity.Next = Head ;
   Head.Prev = newEntity;
   Head = newEntity;
}

在这里你有单独的读写锁,除非队列中只有一个entiry,否则它们不会互相阻塞。