Condividi tramite


Inversione priorità

Un fenomeno noto come inversione di priorità si verifica quando un thread con priorità alta viene ritardato a tempo indefinito mentre è in attesa di una risorsa contenuta in un thread con priorità bassa che non può continuare a causa della presenza di un thread con priorità media non correlata. Di conseguenza, il thread ad alta priorità viene effettivamente negato l'accesso alla CPU dal thread con priorità media inferiore.

Ad esempio, un thread T1 in esecuzione con priorità 4 viene preceduto da un thread con priorità più alta T2 con priorità 8 dopo l'acquisizione di un blocco. Successivamente, un thread T3 con priorità 12 arriva, annulla T2 e viene bloccato cercando di acquisire il blocco mantenuto da T1. A questo punto, sia T1 che T2 sono pronti per l'esecuzione, ma poiché T2 ha una priorità più alta, continua a essere eseguito, impedendo in modo efficace T3, un thread con priorità più alta, di eseguire lo stato di avanzamento perché T1 non è in grado di eseguire e rilasciare il blocco.

L'utilità di pianificazione thread risolve questo problema tramite una funzionalità denominata AutoBoost. AutoBoost tiene automaticamente traccia delle prenotazioni delle risorse e regola le priorità dei thread applicando piani prioritari che un thread non deve mai scendere al di sotto. Ad esempio, se un thread con priorità bassa acquisisce una sezione critica e un thread con priorità più alta viene bloccato in attesa della sezione critica, la priorità del proprietario viene elevata alla priorità massima del cameriere finché non rilascia la risorsa.