Inversiunea priorităților

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , inversiunea prioritară este o problemă care apare într-un mediu multitasking sau multithreading în timpul accesului prin sarcini și / sau fire către aceeași secțiune critică .

Accesul la secțiunea critică este precedat de o blocare mutex asociată acestei secțiuni critice; ieșirea din secțiunea critică este precedată de o deblocare a mutexului asociat acestei secțiuni critice. Fiecare blocare trebuie să fie în mod necesar urmată de o deblocare .

Exemplu

Date trei sarcini T1, T2, T3 cu prioritățile respective p1> p2> p3

Să presupunem că T1 și T3 trebuie să acceseze resursa la care este asociat mutex S

Dacă T3 începe să fie procesat și se blochează (S) înainte ca T1 să înceapă când începe T1 și încearcă să blocheze (S), acesta va fi blocat pentru un timp nedefinit, adică până când T3 deblochează (S) eliberând resursa „S”. De fapt, T1 nu poate continua execuția fără resursa „S” deținută de T3. Este evident că în acest caz T1 este penalizat în favoarea lui T3 în ciuda ordinii prioritare p1> p3 (caz de blocare directă ).

Dacă, înainte de deblocarea T3 (S), începe T2 (care nu folosește resursa S), atunci T3 va fi suspendat pentru a permite procesarea T2 în virtutea priorităților p2> p3. În acest caz, T1 va trebui să aștepte ca și T2 să fie procesată. De fapt, T1 este blocat pe T3, care la rândul său este blocat pe T2, în ciuda ordinii de prioritate p1> p2 (caz de blocare indirectă ).

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT