Junior — Middle
Leg uit wat een semafoor is en hoe het wordt gebruikt om thread-synchronisatie te beheren.
sobes.tech AI
Antwoord van AI
Een semafoor is een primitieve synchronisatie die wordt gebruikt om de toegang tot een gedeelde bron te beheren door meerdere threads.
Het bevat een teller die aangeeft hoeveel threads gelijktijdig toegang kunnen krijgen tot de bron.
- Als de teller groter is dan nul, kan een thread binnenkomen en de teller met 1 verlagen.
- Als de teller nul is, wordt de thread geblokkeerd en wacht tot een andere thread de bron vrijmaakt.
In C# wordt de semafoor weergegeven door de klasse Semaphore of SemaphoreSlim.
Voorbeeld van het gebruik van SemaphoreSlim:
using System;
using System.Threading;
class Program
{
static SemaphoreSlim semaphore = new SemaphoreSlim(2); // maximaal 2 threads tegelijk
static void AccessResource(int id)
{
Console.WriteLine($"Thread {id} wacht op toegang");
semaphore.Wait(); // toegang aanvragen
Console.WriteLine($"Thread {id} heeft toegang gekregen");
Thread.Sleep(1000); // simulatie van werk met de bron
Console.WriteLine($"Thread {id}} geeft de bron vrij");
semaphore.Release(); // vrijmaken van de bron
}
static void Main()
{
for (int i = 1; i <= 5; i++)
{
int localId = i;
new Thread(() => AccessResource(localId)).Start();
}
}
}
In dit voorbeeld kunnen niet meer dan twee threads tegelijk met de bron werken, de rest wacht op hun beurt.