Middle+
Kas ir Semaphore sinhronizācijas primitives?
sobes.tech AI
Atbilde no AI
Semaphore — tas ir sinhronizācijas primitives, kas pārvalda piekļuvi ierobežotam resursu baseinam. Tas uztur skaitītāju, kas nosaka, cik pavedieni var vienlaikus piekļūt resursam.
Galvenās operācijas:
WaitOne(vaiWaitAsyncasinhronajam kodam): Samazina skaitītāju, ja tas ir lielāks par nulli. Ja skaitītājs ir nulle, pavediens tiek bloķēts līdz skaitītājs kļūst pozitīvs (cits pavediens izsaucRelease).Release: Palielina skaitītāju un var atbloķēt gaidošo pavedienu.
Semaphore tipi:
Semaphore: Sistēmas līmeņa (ar vai bez nosaukuma), var tikt izmantots starp procesiem.SemaphoreSlim: Viegls realizācija, paredzēta lietošanai iekšējā procesā. Prioritāte ir intra-procesu sinhronizācijai.
Piemērs SemaphoreSlim izmantošanai:
// semaphoreSlim var tikt izmantots, lai ierobežotu vienlaicīgu piekļuvi resursam
// Šajā gadījumā atļauts 2 pavedieni vienlaikus
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Gaida semafora atbrīvošanu
await semaphoreSlim.WaitAsync();
try
{
// Piekļuve ierobežotam resursam
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} piekļūst resursam");
await Task.Delay(1000); // Darba ar resursu simulācija
}
finally
{
// Atbrīvo semaforu
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} atbrīvo resursu");
semaphoreSlim.Release();
}
}