Mi chiedo solo se esiste un criterio di blocco in C++ 11 che impedisce i thread di inedia.Come evitare thread di fame in C++ 11
Ho un mucchio di thread che competono per un mutex. Ora, il mio problema è che il thread che sta lasciando una sezione critica inizia immediatamente a competere per lo stesso mutex e la maggior parte delle volte vince. Quindi altri thread in attesa sul mutex stanno morendo di fame.
Non voglio lasciare che il thread, lasciando una sezione critica, dorma per una quantità minima di tempo per dare agli altri thread la possibilità di bloccare il mutex.
Ho pensato che ci devono essere alcuni parametri che abiliterebbero un blocco corretto per i thread in attesa sul mutex ma non sono riuscito a trovare alcuna soluzione appropriata.
Bene, ho trovato la funzione std :: this_thread :: yield(), che suppone di riprogrammare l'ordine di esecuzione dei thread, ma è solo un suggerimento per il thread del programma di pianificazione e dipende dall'implementazione del thread dello scheduler se riprogramma i thread o meno.
Esiste un modo per fornire un criterio di blocco corretto per i thread in attesa sullo stesso mutex in C++ 11? Quali sono le solite strategie?
Grazie
http://stackoverflow.com/questions/11666610/how-to-give-priority-to-privileged-thread-in-mutex-locking Ecco un link che potrebbe aiutare voi !! –
Questo potrebbe sembrare un problema di progettazione, non un problema di fame di thread, puoi pubblicare il codice per permettere alle persone di vederlo e forse di aiutare. – dirvine
Generalmente non ci sono molti thread in competizione per un mutex - se il tuo codice è seriale, solo un thread può funzionare contemporaneamente, perché non ha un numero minore di thread? Ci sono validi motivi, ma non sono tutti gli stessi validi motivi, e possono avere risposte diverse! – Yakk