Szukam kolejki priorytetowej zaimplementowanej w Delphi, która działałaby dobrze w środowisku wielowątkowym.Priorytetowa kolejka wątków bezpiecznych dla Delphi?
Idealnie pozbawiony blokady lub zaprojektowany do wielowątkowych wstawek/usuwa coś lepszego niż zamknięta owijka wokół implementacji jednowątkowej (którą już mam).
Specyfika polega na tym, że w normalnej pracy pojawiałyby się tylko dodania, usunięcia i powiadomienia, gdy zmieni się górny (priorytetowy element), podczas gdy operacje "pop" o najwyższym priorytecie powinny być bardzo rzadkie.
Byłby używany do zadań monitorowania wątku watchdoga/limitu czasu, wykonywanych w innych wątkach, oczekuje się, że zadanie to zakończy się normalnie przez większość czasu, więc zostaną one dodane/usunięte z kolejki. Wątek limitu czasu zasadniczo czeka na następne zdarzenie timeout, stąd potrzeba powiadomień, gdy nastąpi zmiana zdarzenia o najwyższym priorytecie.
Zadania są obsługiwane przez skrypty, które można bezpiecznie zakończyć w dowolnym momencie.
Jeśli istnieją lepsze algorytmy niż kolejka priorytetowa, mogą to być również dobre odpowiedzi!
Edit: po uwagą Martin James, inna specyfika jest taka, że istnieje stosunkowo niewiele różne wartości limitu czasu, a dla każdej wartości limitu czasu, problem staje się, że z kolejki FIFO.
Dlaczego "zablokowane opakowanie wokół implementacji jednowątkowej" nie jest wystarczająco dobre dla tego zadania? – Pol
Jakie są ograniczenia wydajności, które powodują, że rozwiązanie blokujące nie jest odpowiednie? –
@Pol: Nie jest wystarczająco dobra, ponieważ mam już jedną (jak powiedziałem w poście). –