Sobes.tech
Middle

Ce sunt lock-urile în C#?

sobes.tech AI

Răspuns de la AI

lock în C# este utilizat pentru a asigura accesul exclusiv la un bloc de cod. Asigură că doar un singur fir de execuție poate executa acel bloc simultan, prevenind condițiile de cursă (race conditions) atunci când se lucrează cu resurse partajate.

private static readonly object _lockObject = new object(); // Obiect pentru sincronizare

public void AccessSharedResource()
{
    lock (_lockObject) // Blocarea obiectului
    {
        // Secțiune critică: cod care necesită acces exclusiv
        // Lucru cu resursa partajată (de exemplu, modificarea unei variabile)
    } // Blocarea se eliberează automat la ieșirea din bloc
}

Alternative și concepte conexe:

  • Monitor: Oferă un control mai granular asupra sincronizării, inclusiv metodele Wait, Pulse, PulseAll.
  • Mutex: Se folosește pentru sincronizare între procese, precum și între firele din același proces.
  • Semaphore/SemaphoreSlim: Limitează numărul de fire care pot accesa simultan o resursă.
  • ReaderWriterLockSlim: Permite mai multor fire să citească simultan, dar doar unuia să scrie.

Alegerea mecanismului de blocare depinde de sarcina specifică de sincronizare. lock este o formă scurtă de utilizare a Monitor.Enter și Monitor.Exit și este potrivit pentru cele mai simple cazuri de sincronizare în interiorul aceluiași proces.