Подтвердить что ты не робот

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Julian Bucknall (Автор "Tomes of Delphi: Алгоритмы и структуры данных" ) недавно объявил о выпуске версии Delphi XE EZDSL (библиотека структур Delphi) в Blog.

К сожалению, TThreadsafePriorityQueue (реализованный в EZDSLPQu.PAS) основан на блокировке.

Я не могу не поделиться хорошими новостями, и мои другие намерения - это призыв к его вкладу в ответ на вопрос.

Ответ 2

Моя каркасная архитектура полностью построена вокруг приоритетных поточных очередей - это единственная модель потоковой передачи, которую я использую (http://www.csinnovations.com/framework_overview.htm). Крутая кривая обучения, но это может дать вам некоторые идеи.