Sobes.tech
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 (vai WaitAsync asinhronajam 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 izsauc Release).
  • 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();
    }
}