Delphi的线程安全优先级队列?

Eri*_*nge 12 delphi priority-queue thread-safety

我正在寻找一个在Delphi中实现的优先级队列,它在多线程环境中运行良好.

理想情况下无锁,或设计用于多线程插入/删除,其中包含比单线程实现(我已经拥有)的锁定包装更好的东西.

特殊性在于,在正常操作中,当顶部(最高优先级项)改变时,将仅存在添加,删除和通知,而最高优先级项的"弹出"操作应该非常罕见.

它将用于监视/超时线程监视任务,在其他线程中执行,这些任务预计在大多数时间内正常终止,因此它们只是从队列中添加/删除.超时线程基本上会等待下一个超时事件,因此在最高优先级事件发生更改时需要通知.

任务由脚本处理,可以随时安全地终止.

如果有比这更好的算法而不是优先级队列,它们也可能是很好的答案!

编辑:在Martin James的评论之后,另一个特点是相对较少的不同超时值,并且对于每个超时值,问题变成FIFO队列的问题.

Ben*_*hDk 0

您可以为每个优先级使用一个队列,而不是单个队列。

OmnithreadLibrary 包含线程安全队列: http ://code.google.com/p/omnithreadlibrary/

http://code.google.com/p/omnithreadlibrary/

  • 多个单优先级队列并不是真正的解决方案。所有“弹出”操作都变得非常复杂。(推,OTOH,很简单。)在我的中期计划中有一个 TODO 说“检查无锁优先级队列的可能性”,但这在接下来的几个月内不会发生。 (5认同)