我正在寻找一个在Delphi中实现的优先队列,能够在多线程环境下很好地工作。
最好是无锁实现,或者是为多线程插入/删除设计的,而不是一个单线程实现的加锁包装(这已经有了)。
具体要求是,在正常操作中,只有添加、删除和通知顶部(最高优先级项)更改时,而“弹出”最高优先级项的操作应该非常不频繁。
它将用于监视任务的看门狗/超时线程,在其他线程中执行这些任务,大部分时间会正常终止,因此它们只需要从队列中添加/删除。超时线程基本上会等待下一个超时事件,因此需要在顶部优先级事件发生更改时进行通知。
这些任务由脚本处理,可以随时安全终止。
如果有比优先队列更好的算法,也可以作为好的答案!
编辑:根据Martin James的说法,另一个特点是超时值相对较少,对于每个超时值,问题变成了FIFO队列的问题。