Поточно-ориентированная очередь приоритетов для Delphi?

Я ищу приоритетную очередь, реализованную в Delphi, которая хорошо работала бы в многопоточной среде.

Идеально без блокировок или разработан для многопоточной вставки / удаления с чем-то лучше, чем заблокированная оболочка для однопоточной реализации (которая у меня уже есть).

Специфика состоит в том, что при нормальной работе добавление, удаление и уведомления будут происходить только при изменении верхнего (элемента с наивысшим приоритетом), в то время как операции «выталкивания» элемента с наивысшим приоритетом должны выполняться очень редко.

Он будет использоваться для задач наблюдения за потоком сторожевого таймера / тайм-аута, выполняемых в других потоках, ожидается, что эти задачи обычно завершаются большую часть времени, поэтому они будут просто добавлены / удалены из очереди. Поток тайм-аута, по сути, будет ждать следующего события тайм-аута, отсюда и необходимость уведомлений при изменении события с наивысшим приоритетом.

Задачи обрабатываются сценариями, которые можно безопасно завершить в любой момент.

Если есть лучшие алгоритмы для этого, чем очередь с приоритетом, они тоже могут быть хорошими ответами!

Изменить: следуя замечанию Мартина Джеймса, другая особенность заключается в том, что существует относительно мало различных значений тайм-аута, и для каждого значения тайм-аута проблема становится проблемой очереди FIFO.

12
задан River 24 October 2017 в 03:32
поделиться