Sobes.tech
Middle+

Mis on Semaphore sünkronsus primitiiv?

sobes.tech AI

Vastus AI-lt

Semaphore on primitiivne sünkroniseerimine, mis juhib juurdepääsu piiratud ressursi kogumile. See toetab loendurit, mis määrab, mitu voogu saavad samaaegselt ressursile juurdepääsu.

Peamised toimingud:

  • WaitOne (või WaitAsync asünkroonse koodi jaoks): vähendab loendurit, kui see on suurem kui null. Kui loendur on null, blokeerib voogu kuni loendur muutub positiivseks (teine voog kutsub Release).
  • Release: suurendab loendurit ja võib vabastada ootava voogu.

Semaphore tüübid:

  • Semaphore: süsteemne (nimetatud või nimetamata), mida saab kasutada protsesside vahel.
  • SemaphoreSlim: kergekaaluline teostus, mõeldud kasutamiseks protsessi sees. Eelistatud sisemise protsessi sünkroniseerimiseks.

Näide SemaphoreSlim kasutamisest:

// semaphoreSlim võib olla kasutatud piirama samaaegset juurdepääsu ressursile
// Antud juhul on lubatud 2 voogu korraga
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);

public async Task AccessResourceAsync()
{
    // Ootab semaphore vabastamist
    await semaphoreSlim.WaitAsync();
    try
    {
        // Piiratud ressursi kasutamine
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} pääseb ressursile");
        await Task.Delay(1000); // Ressursiga töötamise simulatsioon
    }
    finally
    {
        // Vabastab semaphore
        Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} vabastab ressursi");
        semaphoreSlim.Release();
    }
}