Een exclusieve vergrendeling, ook wel schrijfvergrendeling genoemd, is een type vergrendeling bij gelijktijdig programmeren waarbij slechts één thread of proces om op elk gewenst moment toegang te krijgen tot een gedeelde bron. Elke andere thread of elk ander proces dat probeert een exclusieve vergrendeling op diezelfde bron te verkrijgen, wordt geblokkeerd totdat de vergrendeling wordt opgeheven.
Hier is een overzicht:
* Exclusiviteit: Het bepalende kenmerk. Er kan slechts één entiteit tegelijk het slot vasthouden.
* Blokkeren: Threads die proberen het slot te bemachtigen terwijl het al in bezit is, worden geblokkeerd (in de slaapstand gezet) en gaan pas verder als het slot beschikbaar komt.
* Gebruiksscenario's: Exclusieve vergrendelingen zijn essentieel wanneer bewerkingen op een gedeelde bron atomair (ononderbroken) moeten zijn om de gegevensconsistentie te behouden. Dit is van cruciaal belang in scenario's zoals het bijwerken van een databaserecord, het wijzigen van een bestand of het verkrijgen van toegang tot een gedeelde geheugenlocatie. Als meerdere threads tegelijkertijd dezelfde gegevens zouden wijzigen zonder exclusieve vergrendeling, zouden de resulterende gegevens onvoorspelbaar en waarschijnlijk beschadigd zijn.
Contrast met gedeelde sloten:
Exclusieve sloten verschillen van gedeelde sloten (leessloten). Met gedeelde vergrendelingen kunnen meerdere threads tegelijkertijd een gedeelde bron *lezen*, maar ze voorkomen dat een thread naar de bron schrijft totdat alle gedeelde vergrendelingen zijn vrijgegeven.
Implementatie:
Exclusieve vergrendelingen worden geïmplementeerd met behulp van verschillende synchronisatieprimitieven, afhankelijk van de programmeertaal en de omgeving. Voorbeelden zijn onder meer:
* Mutexen (wederzijdse uitsluiting): Een veel voorkomende implementatie in veel besturingssystemen en programmeertalen.
* Semaforen: Kan worden gebruikt om exclusieve sloten te implementeren, hoewel ze meer algemene synchronisatiemogelijkheden bieden.
* Monitoren: Constructies op een hoger niveau die gedeelde bronnen en synchronisatiemechanismen inkapselen.
Voorbeeld (conceptueel):
Stel je een bankrekening voor. Als meerdere threads tegelijkertijd geld proberen op te nemen, zonder een exclusieve blokkering, kan het eindsaldo onjuist zijn. Een exclusieve vergrendeling van het account zorgt ervoor dat er slechts één opnameoperatie tegelijk plaatsvindt, waardoor raceomstandigheden en gegevenscorruptie worden voorkomen. |