Middle+
Ce este un primitive de sincronizare Semaphore?
sobes.tech AI
Răspuns de la AI
Semaphore — este un primitiv de sincronizare care controlează accesul la un pool limitat de resurse. Menține un contor care determină câte fire pot accesa simultan resursa.
Operațiuni principale:
WaitOne(sauWaitAsyncpentru cod asincron): Scade contorul dacă este mai mare decât zero. Dacă contorul este zero, firul de execuție este blocat până când contorul devine pozitiv (alt fir apeleazăRelease).Release: Crește contorul și poate debloca firul de așteptare.
Tipuri de Semaphore:
Semaphore: Sistemic (cu sau fără nume), poate fi utilizat între procese.SemaphoreSlim: Implementare ușoară, destinată utilizării în interiorul unui proces. Preferabil pentru sincronizarea intra-proces.
Exemplu de utilizare a SemaphoreSlim:
// semaphoreSlim poate fi utilizat pentru a limita accesul simultan la o resursă
// În acest caz, sunt permise 2 fire în același timp
private static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2);
public async Task AccessResourceAsync()
{
// Așteaptă eliberarea semaforului
await semaphoreSlim.WaitAsync();
try
{
// Acces la resursa limitată
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} accesând resursa");
await Task.Delay(1000); // Simulare de lucru cu resursa
}
finally
{
// Eliberează semaforul
Console.WriteLine($"{Thread.CurrentThread.ManagedThreadId} eliberând resursa");
semaphoreSlim.Release();
}
}