Sobes.tech
Junior — Middle

Hoe kun je een correcte interactie tussen threads waarborgen bij het uitvoeren van parallelle taken?

sobes.tech AI

Antwoord van AI

Voor een correcte interactie van threads bij het uitvoeren van parallelle taken in C# kunnen de volgende benaderingen worden gebruikt:

  • Locks (lock) — het sleutelwoord lock beperkt de toegang tot een kritieke sectie van de code, zodat slechts één thread deze tegelijk kan uitvoeren.

  • Mutex en Semaphore — flexibelere synchronisatie-mechanismen die kunnen worden gebruikt om de toegang tot bronnen tussen threads of processen te beheren.

  • Monitor — een klasse die methoden biedt voor blokkering en wachten, vergelijkbaar met lock, maar met meer controle.

  • Concurrerende collecties — bijvoorbeeld ConcurrentDictionary, ConcurrentQueue, enz., die veilig zijn voor multi-thread toegang zonder extra synchronisatie.

  • Interlocked — klasse voor atomische bewerkingen op variabelen (bijvoorbeeld, increment, decrement).

  • async/await en Task Parallel Library (TPL) — maken het mogelijk om asynchrone en parallelle code te schrijven, waardoor synchronisatieproblemen worden geminimaliseerd.

Voorbeeld van gebruik van lock:

private readonly object _locker = new object();
private int _counter = 0;

public void Increment()
{
    lock (_locker)
    {
        _counter++;
    }
}

Deze aanpak garandeert dat bij gelijktijdige aanroepen van de Increment-methode de waarde van _counter correct wordt verhoogd zonder racecondities.