Nello scheduling dei processi si possono incontrare difficoltà ogniqualvolta un processo a priorità più alta abbia bisogno di leggere o modificare dati a livello kernel utilizzati da un processo, o da una catena di processi, a priorità più bassa. Visto che i dati a livello kernel sono tipicamente protetti da un lock, il processo a priorità maggiore dovrà attendere finché il processo a priorità minore non avrà finito di utilizzare le risorse. La situazione si complica ulteriormente se il processo a priorità più bassa viene prelazionato da un processo a priorità più alta.
Assumiamo, per esempio, che vi siano tre processi L, M e H, le cui priorità seguono l’ordine L < M < H. Assumiamo che il processo H richieda il semaforo S al quale sta accedendo il processo L. Usualmente il processo H resterebbe in attesa che L liberi la risorsa S. Supponiamo però che M diventi eseguibile, con prelazione sul processo L. Avviene quindi, indirettamente, che un processo con priorità più bassa, il processo M, influenzi il tempo che H attenderà in attesa della risorsa S.
Questo problema di liveness è noto come inversione della priorità. Dato che l’inversione di priorità si verifica solo su sistemi con più di due priorità, una delle soluzioni è limitare a due il numero di priorità. Tuttavia, questa soluzione non è accettabile nella maggior parte dei sistemi a uso generale. Solitamente questi sistemi risolvono il problema implementando un protocollo di ereditarietà delle priorità, secondo il quale tutti i processi che stanno accedendo a risorse di cui hanno bisogno processi con priorità maggiore ereditano la priorità più alta finché non finiscono di utilizzare le risorse in questione. Quando hanno terminato, la loro priorità ritorna al valore originale. Nell’esempio discusso in precedenza, un protocollo di ereditarietà delle priorità avrebbe permesso al processo L di ereditare temporaneamente la priorità di H, impedendo così al processo M di prelazionare la sua esecuzione. In un tale caso, una volta che il processo H avrà terminato con la risorsa S, rinuncerà alla priorità ereditata da H assumendo di nuovo la priorità originale. Poiché S sarà a questo punto disponibile, il processo H, e non il processo M, sarà il successivo processo eseguito.