Un concept important al sincronizării firului este noțiunea de "secțiune critică" a programului. secțiunea critică - parte a programului, rezultatul care se poate schimba impredictibil, în cazul în care datele comune este schimbat de către alte fire într-un moment în care executarea acestei părți nu a fost încă finalizată. Secțiunea critică este întotdeauna determinată cu privire la anumite date critice, cu modificări necoordonate care pot genera efecte nedorite. În toate firele care funcționează cu date critice, trebuie definită o secțiune critică. În fire diferite, secțiunea critică constă în diferite secvențe de comenzi în cazul general.
32) Explicați esența utilizării variabilelor de blocare.
Pentru a sincroniza firele, programatorul poate folosi variabile globale de blocare. Cu aceste variabile, la care toate firele procesului au acces direct, programatorul funcționează fără a recurge la apeluri de sistem.
Fiecare set de date critice i se atribuie o variabilă binară, care stabilește valoarea debitului 0 atunci când intră în secțiunea critică și valoarea 1 când părăsește. Blocarea variabilelor poate fi utilizată nu numai la accesarea datelor, ci și la resursele partajate de orice fel. Atunci când blocarea variabile există o limită de a întrerupe: nu întrerupe fluxul de executare a operațiunii de testare și stabilirea unei variabile de blocare.
Punerea în aplicare a excluderii reciproce într-un mod de blocare variabile are un dezavantaj semnificativ, și anume, în timpul când un fir este într-o secțiune critică, un alt fir care necesită aceeași resursă prin accesarea procesorul va sondaj continuu deseurile variabile blocarea bucății lor timp .
33) Explicați esența folosirii semaphorelor.
Pentru a sincroniza procesele sau, mai precis, pentru a sincroniza accesul mai multor procese la resurse partajate, se utilizează semafoare. Ca formă de IPC, semafoarele nu sunt proiectate să schimbe cantități mari de date, ca în cazul FIFO sau cozi de mesaje. În schimb, aceștia îndeplinesc o funcție care corespunde pe deplin numelui lor - pentru a permite sau a interzice procesului utilizarea unei resurse partajate.
Utilizarea semaforilor este ilustrată printr-un exemplu simplu. Să presupunem că există o resursă partajată (de exemplu, un fișier). Este necesar să se blocheze accesul la resurse pentru alte procese atunci când un anumit proces efectuează o operație asupra resursei (de exemplu, scrie într-un fișier). Pentru a face acest lucru, asociază o anumită valoare întregă cu resursa dată - un contor disponibil pentru toate procesele. Să presupunem că valoarea unui contor înseamnă disponibilitatea resursei, 0 - inaccesibilitatea acesteia. Apoi, înainte de a începe să lucrați cu resursa, procesul trebuie să verifice valoarea contorului. Dacă este 0, resursa este ocupată și operația este nevalidă, procesul rămâne să aștepte. Dacă valoarea contorului este 1, puteți lucra cu resursa. Pentru a face acest lucru, mai întâi trebuie să blocați resursa, adică să schimbați valoarea contorului la 0. După efectuarea operației pentru a elibera resursa, valoarea contorului trebuie schimbată la 1. În exemplu, contorul joacă rolul de semafor.