Junior
Wat is de functie van het sleutelwoord lock in de programmeertaal C#?
sobes.tech AI
Antwoord van AI
Het sleutelwoord lock wordt gebruikt om toegang tot bronnen te synchroniseren in multithread-toepassingen. Het garandeert dat slechts één thread de code binnen het lock-blok op een bepaald moment kan uitvoeren.
Werking principe:
lockaccepteert als argument een object dat wordt gebruikt als mutex (monitor).- Voordat de code binnen het
lock-blok wordt uitgevoerd, probeert de thread een exclusieve lock op het opgegeven object te verkrijgen. - Als de lock vrij is, krijgt de thread deze en voert de code uit.
- Als de lock door een andere thread wordt bezet, wordt de huidige thread geblokkeerd (gaat in wachtstand) totdat de lock wordt vrijgegeven.
- Bij het verlaten van het
lock-blok (zelfs bij uitzondering) wordt de lock automatisch vrijgegeven.
Het wordt gebruikt om gedeelde bronnen te beschermen, zoals klassevelden, collecties of andere objecten die door meerdere threads gelijktijdig kunnen worden benaderd, om racecondities te voorkomen en de gegevensintegriteit te waarborgen.
Voorbeeld van gebruik:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Object voor synchronisatie
public void Increment()
{
lock (_lockObject) // Exclusieve toegang tot de codeblok
{
_counter++; // Veilige wijziging van gedeelde bron
}
}
public int GetCounter()
{
lock (_lockObject) // Ook bij lezen exclusieve toegang
{
return _counter;
}
}
}
Belangrijke punten:
- Het object voor locking moet van een referentietype zijn en meestal een privéveld (
readonly) om externe inmenging te voorkomen. - Vermijd het locken van types zoals
string,thisoftypeof(TypeName), omdat deze gedeeld kunnen worden of extern toegankelijk zijn, wat kan leiden tot deadlocks of onjuiste werking. lockis syntactisch suiker voor het gebruik van de methoden van de klasseMonitor.