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õiWaitAsyncasünkroonse koodi jaoks): vähendab loendurit, kui see on suurem kui null. Kui loendur on null, blokeerib voogu kuni loendur muutub positiivseks (teine voog kutsubRelease).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();
}
}