Middle+
Čo je to synchronizačný primitív Semaphore?
sobes.tech AI
Odpoveď od AI
Semaphore — je primitives synchronizácie, ktorý riadi prístup k obmedzenému poolu zdrojov. Udržiava čítač, ktorý určuje, koľko vlákien môže súčasne získať prístup ku zdroju.
Hlavné operácie:
WaitOne(aleboWaitAsyncpre asynchrónny kód): Znižuje čítač, ak je väčší ako nula. Ak je čítač nulový, vlákno je zablokované, kým čítač nebude kladný (iné vlákno zavoláRelease).Release: Zvyšuje čítač a môže odblokovať čakajúce vlákno.
Typy Semaphore:
Semaphore: Systémový (s názvom alebo bez), môže byť použitý medzi procesmi.SemaphoreSlim: Ľahká implementácia, určená na použitie vnútri procesu. Preferovaná pre intra-procesovú synchronizáciu.
Príklad použitia SemaphoreSlim:
// semaphoreSlim môže byť použitý na obmedzenie súčasného prístupu ku zdroju
// V tomto prípade je povolené 2 vlákna súčasne
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Čaká na uvoľnenie semaforu
await semaphoreSlim.WaitAsync();
try
{
// Prístup k obmedzenému zdroju
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} pristupuje ku zdroju");
await Task.Delay(1000); // Simulácia práce so zdrojom
}
finally
{
// Uvoľňuje semafor
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId}} uvoľňuje zdroj");
semaphoreSlim.Release();
}
}