我正在寻找一个在Delphi中实现的优先级队列,它可以在多线程环境中很好地工作。东西不是围绕一个单线程执行锁定包装(我已经有)更好Delphi的线程安全优先级队列?
理想的无锁的,或专为多线程插入/删除。
特殊性在于,在正常操作中,只有在顶级(最高优先级项目)发生更改时才会添加,删除和通知,而最高优先级项目的“弹出”操作应该非常少见。
将它用于监视/超时线程监视任务,在其他线程执行,这些任务预计正常终止的大部分时间,所以他们只会被添加/删除从队列中。超时线程本质上将等待下一个超时事件,因此在最高优先级事件发生变化时需要通知。
这些任务由脚本处理,可以在任何时候安全地终止。
如果有比这个优先级队列更好的算法,它们也可能是很好的答案!
编辑:在Martin James发表评论之后,另一个特性是相对较少的不同超时值,并且对于每个超时值,问题都变成了FIFO队列的问题。
为什么“围绕单线程实现锁定包装”对于此任务来说不够好? – Pol 2011-12-20 08:34:55
使基于锁的解决方案不合适的性能约束是什么? – 2011-12-20 08:35:25
@Pol:这还不够好,因为我已经有了一个(正如帖子中所说的) – 2011-12-20 08:56:17