谷歌对这个搜索词感到头疼。
我需要一个线程安全机制来实现以下功能。 插入优先级超过读取的线程安全列表。
我需要始终能够将一条消息(比方说)插入队列(或其他),偶尔也能读取。 所以阅读,不能,干扰插入。
感谢。
编辑:阅读也意味着清除红色部分。
EDIT2:也许有帮助,有一位读者和一位作家。
EDIT3:案例场景:每秒10次插入,持续1分钟(或者使用软件所在的硬件可以达到最大值)。然后插入暂停1分钟。然后在2秒内插入20次(或使用软件所在的硬件可以最大化)30秒。然后暂停30秒。然后暂停用于最大读数。我不知道我是否足够清楚。显然不是。 (PS:我不知道何时会发生暂停,那就是问题)。最大值插入延迟:Enqueue或Add方法完成的时间。
附加:使用带有TryGetValue和TryRemove的AddOrUpdate的ConcurrentDictionary可以使用吗?
答案 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,否则它们不会互相阻塞。