Middle+
Co je to synchronizační primitiv Semaphore?
sobes.tech AI
Odpověď od AI
Semaphore — je primitives synchronizace, který řídí přístup k omezenému poolu zdrojů. Udržuje čítač, který určuje, kolik vláken může současně získat přístup ke zdroji.
Hlavní operace:
WaitOne(neboWaitAsyncpro asynchronní kód): Snižuje čítač, pokud je větší než nula. Pokud je čítač nulový, vlákno je zablokováno, dokud čítač nebude kladný (jiné vlákno zavoláRelease).Release: Zvyšuje čítač a může odblokovat čekající vlákno.
Typy Semaphore:
Semaphore: Systémový (s názvem nebo bez), může být použit mezi procesy.SemaphoreSlim: Lehká implementace, určená pro použití uvnitř procesu. Preferováno pro intra-procesovou synchronizaci.
Příklad použití SemaphoreSlim:
// semaphoreSlim může být použit ke omezení současného přístupu ke zdroji
// V tomto případě je povoleno 2 vlákna současně
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Čeká na uvolnění semaforu
await semaphoreSlim.WaitAsync();
try
{
// Přístup ke omezenému zdroji
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} přistupuje ke zdroji");
await Task.Delay(1000); // Simulace práce se zdrojem
}
finally
{
// Uvolní semafor
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} uvolňuje zdroj");
semaphoreSlim.Release();
}
}