我正在寻找在Delphi中实现的优先级队列,在多线程环境中运行良好.
理想的无锁定,或设计用于多线程插入/删除,比单线程实现(我已经拥有)的锁定包装更好.
特殊之处在于,在正常操作中,当顶部(最高优先级项目)更改时,只会添加,删除和通知,而最高优先级项目的“弹出”操作应该非常少见.
它将用于看门狗/超时线程监视任务,在其他线程中执行,这些任务预计大部分时间将正常终止,因此只会从队列中添加/删除.超时线程本质上将等待下一个超时事件,因此在最高优先级事件发生变化时需要通知.
任务由脚本处理,可随时安全终止.
如果比优先级队列有更好的算法,那也可能是一个很好的答案!
编辑:遵循马丁·詹姆斯的话,另一个特点是有不同的超时值相对较少,而对于每个超时值,问题就成为FIFO队列的问题.
解决方法
Julian Bucknall(“Tomes of Delphi:算法和数据结构”的作者)最近宣布在他的
Blog中发布了一个Delphi XE版本的
EZDSL(一个Delphi Structures Library).
不幸的是,TThreadsafePriorityQueue(在EZDSLPQu.PAS中实现)是基于锁的.
我不能分享好消息,而我的另一个意图是呼吁他回答这个问题.