Middle+
Šta je Semaphore primitiv za sinhronizaciju?
sobes.tech АИ
Одговор од АИ
Semaphore — to primitives za sinhronizaciju koja kontroliše pristup ograničenom bazenu resursa. Održava brojač koji određuje koliko niti može istovremeno pristupiti resursu.
Glavne operacije:
WaitOne(iliWaitAsyncza asinhroni kod): Smanjuje brojač ako je veći od nule. Ako je brojač nula, nit se blokira dok brojač ne postane pozitivan (druga nit pozivaRelease).Release: Povećava brojač i može otključati čekajuću nit.
Tipovi Semaphore:
Semaphore: Sistemskog (sa ili bez imena), može se koristiti između procesa.SemaphoreSlim: Laka implementacija, namenjena za upotrebu unutar procesa. Preferira se za intra-procesnu sinhronizaciju.
Primer korišćenja SemaphoreSlim:
// semaphoreSlim može biti korišćen za ograničavanje istovremenog pristupa resursu
// U ovom slučaju, dozvoljena su 2 niti istovremeno
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Čeka na oslobađanje semafora
await semaphoreSlim.WaitAsync();
try
{
// Pristup ograničenom resursu
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} pristupa resursu");
await Task.Delay(1000); // Simulacija rada sa resursom
}
finally
{
// Oslobađa semafor
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} oslobađa resurs");
semaphoreSlim.Release();
}
}