Sobes.tech
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:

  1. lock accepteert als argument een object dat wordt gebruikt als mutex (monitor).
  2. Voordat de code binnen het lock-blok wordt uitgevoerd, probeert de thread een exclusieve lock op het opgegeven object te verkrijgen.
  3. Als de lock vrij is, krijgt de thread deze en voert de code uit.
  4. Als de lock door een andere thread wordt bezet, wordt de huidige thread geblokkeerd (gaat in wachtstand) totdat de lock wordt vrijgegeven.
  5. 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, this of typeof(TypeName), omdat deze gedeeld kunnen worden of extern toegankelijk zijn, wat kan leiden tot deadlocks of onjuiste werking.
  • lock is syntactisch suiker voor het gebruik van de methoden van de klasse Monitor.