Sobes.tech
Junior

Koja je funkcija ključne reči lock u jeziku C#?

sobes.tech АИ

Одговор од АИ

Ključna riječ lock koristi se za sinkronizaciju pristupa resursima u višestrukim nitima. Osigurava da samo jedna nit može izvršiti kod unutar lock bloka u određenom trenutku.

Princip rada:

  1. lock prihvaća kao argument objekt koji se koristi kao mutex (monitor).
  2. Prije izvršavanja koda unutar lock bloka, nit pokušava dobiti isključivu blokadu na zadani objekt.
  3. Ako je blokada slobodna, nit je dobiva i izvršava kod.
  4. Ako je blokada zauzeta od strane druge niti, trenutna nit se blokira (prelazi u stanje čekanja) dok se blokada ne oslobodi.
  5. Pri izlasku iz lock bloka (čak i u slučaju iznimke), blokada se automatski oslobađa.

Koristi se za zaštitu zajedničkih resursa, poput polja klasa, kolekcija ili drugih objekata kojima mogu pristupati istovremeno više niti, kako bi se spriječili uvjeti utrke (race conditions) i osigurala integritet podataka.

Primjer korištenja:

public class SharedResource
{
    private int _counter;
    private readonly object _lockObject = new object(); // Objekt za sinkronizaciju

    public void Increment()
    {
        lock (_lockObject) // Ekskluzivan pristup bloku koda
        {
            _counter++; // Sigurna promjena zajedničkog resursa
        }
    }

    public int GetCounter()
    {
        lock (_lockObject) // Također pri čitanju
        {
            return _counter;
        }
    }
}

Važne točke:

  • Objekt za zaključavanje mora biti referentnog tipa i, u pravilu, privatno polje (readonly) kako bi se spriječila vanjska intervencija.
  • Izbjegavajte zaključavanje tipova poput string, this ili typeof(TypeName), jer mogu biti zajednički korišteni ili dostupni izvana, što može dovesti do deadlockova ili neispravnog rada.
  • lock je sintaktički šećer za korištenje metoda klase Monitor.