Middle+
Kas yra Semaphore sinchronizacijos primityvas?
sobes.tech AI
Atsakymas iš AI
Semaphore — tai sinchronizacijos primitivas, kuris valdo prieigą prie riboto išteklių baseino. Jis palaiko skaitiklį, kuris nustato, kiek srautų gali vienu metu pasiekti išteklių.
Pagrindinės operacijos:
WaitOne(arbaWaitAsyncasinchroniniam kodui): sumažina skaitiklį, jei jis didesnis už nulį. Jei skaitiklis lygus nuliui, srautas yra blokuojamas iki tol, kol skaitiklis taps teigiamas (kitas srautas iškviesRelease).Release: padidina skaitiklį ir gali atrakinti laukiančią srautą.
Semaphore tipai:
Semaphore: sistemos lygio (su ar be vardo), gali būti naudojamas tarp procesų.SemaphoreSlim: lengvas įgyvendinimas, skirtas naudoti viduje proceso. Pirmenybė teikiama intra-proceso sinchronizacijai.
SemaphoreSlim naudojimo pavyzdys:
// semaphoreSlim gali būti naudojamas riboti vienu metu prieigą prie išteklių
// Šiuo atveju leidžiama 2 srautams vienu metu
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Laukia semaforo išlaisvinimo
await semaphoreSlim.WaitAsync();
try
{
// Prieiga prie riboto išteklių
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} prieina prie išteklių");
await Task.Delay(1000); // Darbo su ištekliais simuliacija
}
finally
{
// Išlaisvina semaforą
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} išlaisvina išteklius");
semaphoreSlim.Release();
}
}