Ett exklusivt lås, även känt som ett skrivlås, är en typ av lås i samtidig programmering som endast tillåter
en tråd eller process för att få tillgång till en delad resurs vid varje given tidpunkt. Alla andra trådar eller processer som försöker skaffa ett exklusivt lås på samma resurs kommer att blockeras tills låset släpps.
Här är en uppdelning:
* Exklusivitet: Den definierande egenskapen. Endast en enhet kan hålla låset åt gången.
* Blockering: Trådar som försöker skaffa låset när det redan hålls är blockerade (läggs i sömn) och kommer inte att fortsätta förrän låset blir tillgängligt.
* Användningsfall: Exklusiva lås är viktiga när operationer på en delad resurs måste vara atomisk (oavbruten) för att upprätthålla datakonsistens. Detta är avgörande i scenarier som att uppdatera en databaspost, ändra en fil eller få åtkomst till en delad minnesplats. Om flera trådar samtidigt modifierade samma data utan exklusiv låsning, skulle de resulterande uppgifterna vara oförutsägbara och troligen skadade.
Kontrast med delade lås:
Exklusiva lås skiljer sig från delade lås (läslås). Delade lås tillåter flera trådar att * läsa * en delad resurs samtidigt, men de hindrar någon tråd från att skriva till resursen tills alla delade lås släpps.
Implementering:
Exklusiva lås implementeras med olika synkroniseringsprimitiv beroende på programmeringsspråk och miljö. Exempel inkluderar:
* mutexes (ömsesidig uteslutning): En gemensam implementering i många operativsystem och programmeringsspråk.
* Semaphores: Kan användas för att implementera exklusiva lås, även om de erbjuder mer allmänna synkroniseringsfunktioner.
* monitorer: Konstruktioner på högre nivå som kapslar in delade resurser och synkroniseringsmekanismer.
Exempel (konceptuell):
Föreställ dig ett bankkonto. Om flera trådar försökte samtidigt ta ut pengar, utan ett exklusivt lås, kan den slutliga saldot vara felaktigt. Ett exklusivt lås på kontot säkerställer att endast en uttagsoperation sker åt gången och förhindrar rasvillkor och datakorruption.