Priority Inheritance
# Priority Inheritance

Il protocollo Priority Inheritance viene usato per la gestione di accesso a risorse condivise. Quando due o più task (o thread) devono accedere alle stesse risorse si pone il problema di chi debba accedervi per primo e di come si possa segnalare, a tutti gli attori, la modifica di una particolare risorsa condivisa da parte di un attore. Questo protocollo elimina il problema dell'inversione di priorità ma subisce il problema dello stallo (deadlock).

Siano t1, t2, t3 tre processi o task o thread con priorità p1, p2, p3 (in ordine dalla maggiore alla minore priorità), e sia 'S' il mutex che permette l'accesso ad una risorsa necessaria per l'esecuzione di t1, t2 e t3.

Se t3 acquisisce S e successivamente t1 tenta di acquisire S, t1 si blocca nel tentativo di acquisire il mutex. Questo può provocare il fenomeno dell'inversione di priorità, in quanto t2, che ha prelazione nei confronti di t3, può ritardare ulteriormente l'esecuzione di t1. Per evitare questo il protocollo Priority Inheritance prevede che t3, che detiene S, erediti la priorità massima tra la sua (p3) e quella dei processi in attesa su S, fino al rilascio del mutex. Nel caso specifico, poiché p1 è il thread a priorità massima in attesa sul mutex, t3 acquisirà priorità p1 fino a quando non rilascerà S.

