Middle+
Wat is een primitief voor synchronisatie Semaphore?
sobes.tech AI
Antwoord van AI
Semaphore — is een synchronisatieprimitive die de toegang tot een beperkte resourcepool beheert. Het houdt een teller bij die bepaalt hoeveel threads gelijktijdig toegang kunnen krijgen tot de resource.
Belangrijkste operaties:
WaitOne(ofWaitAsyncvoor asynchrone code): Verlaagt de teller als deze groter is dan nul. Als de teller nul is, wordt de thread geblokkeerd totdat de teller positief wordt (een andere thread roeptReleaseaan).Release: Verhoogt de teller en kan de wachtende thread ontgrendelen.
Types Semaphore:
Semaphore: Systeemwijd (met of zonder naam), kan tussen processen worden gebruikt.SemaphoreSlim: Lichtgewicht implementatie, bedoeld voor gebruik binnen een proces. Voorkeur voor intra-proces synchronisatie.
Voorbeeld van gebruik van SemaphoreSlim:
// semaphoreSlim kan worden gebruikt om gelijktijdige toegang tot een resource te beperken
// In dit geval zijn 2 threads tegelijk toegestaan
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Wacht tot de semaphore wordt vrijgegeven
await semaphoreSlim.WaitAsync();
try
{
// Toegang tot de beperkte resource
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} toegang tot resource");
await Task.Delay(1000); // Simulatie van werk met de resource
}
finally
{
// Vrijgeven van de semaphore
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}} resource vrijgeven");
semaphoreSlim.Release();
}
}