Inversione di priorità

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

In informatica l'inversione di priorità è un problema che si verifica in un ambiente multitasking o multithreading durante l'accesso, da parte di task e/o thread alla stessa sezione critica.

L'accesso alla sezione critica è preceduto da un lock del mutex associato a tale sezione critica; l'uscita dalla sezione critica è preceduta da un unlock del mutex associato a tale sezione critica. Ad ogni lock deve necessariamente seguire un unlock.

Esempio[modifica | modifica wikitesto]

Dati tre task T1, T2, T3 con rispettive priorità p1 > p2 > p3

Supponiamo che T1 e T3 debbano accedere alla risorsa alla quale è associato il mutex S

Se T3 inizia ad essere processato e fa un lock(S) prima che T1 parta allorquando T1 partirà e tenterà di fare un lock(S) verrà bloccato per un tempo non definito, cioè fino a quando T3 non farà un unlock(S) liberando la risorsa 'S'. T1 infatti non può continuare l'esecuzione senza la risorsa 'S' detenuta da T3. Risulta evidente che in questo caso T1 venga penalizzato a favore di T3 a dispetto dell'ordine delle priorità p1>p3 (caso di blocco diretto).

Se, prima che T3 faccia un unlock(S), parte il T2 (che non utilizza la risorsa S), allora T3 verrà sospeso per permettere a T2 di essere processato in virtù delle priorità p2>p3. In questo caso T1 dovrà attendere che anche T2 finisca di essere processato. Infatti T1 è bloccato su T3 che a sua volta è bloccato su T2 a dispetto dell'ordine delle priorità p1>p2 (caso di blocco indiretto).

Voci correlate[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica