Sto cercando una coda di priorità implementata in Delphi che funzioni bene in un ambiente multi-thread.Coda priorità thread-safe per Delphi?
Idealmente senza blocco o progettato per inserimenti/cancellazioni multi-thread con qualcosa di meglio di un wrapper bloccato attorno a un'implementazione a thread singolo (che ho già).
La particolarità è che nel normale funzionamento, ci sarebbero solo aggiunte, eliminazioni e notifiche quando il primo (elemento con la priorità più alta) cambia, mentre le operazioni "pop" dell'elemento con la priorità più alta dovrebbero essere molto infrequenti.
Sarebbe utilizzato per attività di controllo del thread di watchdog/timeout, essendo eseguito in altri thread, si prevede che tali attività terminino normalmente la maggior parte del tempo, quindi verranno semplicemente aggiunte/rimosse dalla coda. Il thread di timeout sarebbe essenzialmente in attesa del prossimo evento di timeout, quindi la necessità di notifiche quando l'evento con priorità più alta cambia.
Le attività sono gestite da script, che possono essere terminati in modo sicuro in qualsiasi momento.
Se ci sono algoritmi migliori per questo rispetto a una coda di priorità, potrebbero essere anche buone risposte!
Edit: a seguito di un'osservazione da Martin James, un'altra specificità è che ci sono relativamente pochi valori di timeout diversi, e per ogni valore di timeout, il problema diventa quello di una coda FIFO.
Perché "wrapper bloccato su un'implementazione a thread singolo" non è sufficiente per questa attività? – Pol
Quali sono i limiti di prestazioni che rendono non appropriata una soluzione basata su lock? –
@Pol: Non è abbastanza buono perché ne ho già uno (come detto nel post) –