În informatică , o blocare este un mecanism de sincronizare care permite accesul exclusiv la o resursă partajată între mai multe fire . Blocările sunt o modalitate de a aplica politica de control al concurenței .
Practic, se folosește o blocare soft , care presupune că fiecare fir încearcă să obțină o blocare înainte de a accesa resursa partajată corespunzătoare. Unele sisteme oferă un mecanism de blocare obligatoriu care , atunci când este utilizat, o încercare de a obține acces neautorizat la o resursă blocată va fi anulată prin lansarea unei excepții pe firul de execuție care a încercat să obțină acces.
Un semafor este cel mai simplu tip de blocare. În ceea ce privește accesul la date , nu se face distincție între modurile de acces: partajat (numai citire) sau exclusiv (citire-scriere). În modul partajat, mai multe fire de execuție pot solicita o blocare pentru a accesa datele în modul numai citire. Modul de acces exclusiv este folosit și în algoritmii de actualizare și ștergere.
Tipurile de încuietori se disting prin strategia de blocare a continuării execuției firului. În majoritatea implementărilor, o solicitare de blocare împiedică firul să continue să se execute până când resursa blocată este disponibilă.
Un spinlock este o blocare care așteaptă într-o buclă până când accesul este acordat. O astfel de blocare este foarte eficientă dacă un thread așteaptă o blocare pentru o perioadă mică de timp, evitând astfel reprogramarea excesivă a firelor. Costul așteptării accesului va fi semnificativ dacă unul dintre fire ține blocarea mult timp.
Pentru a implementa eficient mecanismul de blocare, este necesar suport la nivel hardware. Suportul hardware poate fi implementat ca una sau mai multe operațiuni atomice , cum ar fi „ test-and-set ”, „ fach-and-add ” sau „ compara-and-swap ”. Astfel de instrucțiuni fac posibilă verificarea fără întrerupere a liberului încuietorire și, dacă da, obținerea încuietorului.
Pe sistemele cu uniprocesor, este posibil să se execute instrucțiuni fără întreruperi hardware, utilizând instrucțiuni speciale sau prefixe de instrucțiuni care dezactivează temporar întreruperile, dar această abordare nu funcționează pe sistemele multiprocesoare cu memorie partajată. Suportul complet pentru încuietori într-un mediu multiprocesor poate necesita suport hardware și software destul de complex, cu probleme semnificative de sincronizare .