Sobes.tech
Junior

Kāda ir atslēgas vārda lock funkcija C# valodā?

sobes.tech AI

Atbilde no AI

Atslēgas vārds lock tiek daudzvīru programmās tiek izmantots resursu sinhronizācijai. Tas garantē, ka tikai viens pavedienis var izpildīt lock bloka kodu noteiktā brīdī:

Darba princips:

  1. lock pieņem kā argumentu objektu, kas tiek izmantots kā mutexs (monitorings).
  2. Pirms lock bloka koda izpildes, pavedienis mēģina iegūt norādītā objekta monopolu.
  3. Ja aizslēgums ir brīvs, pavedienis to iegūst un izpilda kodu.
  4. Ja aizslēgums ir aizņemts ar citu pavedienu, pašreizējais pavedienis tiek bloķēts (pāriet gaidīšanas stāvoklī), kamēr aizslēgums netiek atbrīvots.
  5. Iznākot no lock bloka (pat izņēmuma gadījumā), aizslēgums tiek automātiski atbrīvots.

Tas tiek izmantots kopēju resursu aizsardzībai, piemēram, klases laukiem, kolekcijām vai citiem objektiem, uz kuriem var vērsties vairāki pavedieni vienlaicīgi, lai novērstu sacensību apstākļus (race conditions) un nodrošinātu datu integritāti:

Piemērs lietošanai:

public class SharedResource
{
    private int _counter;
    private readonly object _lockObject = new object(); // Sinhronizācijas objekts

    public void Increment()
    {
        lock (_lockObject) // Vienlaicīga piekļuve koda blokam
        {
            _counter++; // Droša kopēja resursa izmaiņa
        }
    }

    public int GetCounter()
    {
        lock (_lockObject) // Arī lasīšanas laikā vienlaicīga piekļuve
        {
            return _counter;
        }
    }
}

Svarīgi punkti:

  • Bloķēšanas objekts jābūt atsauces tipa un parasti privātai lauka (readonly), lai novērstu ārēju iejaukšanos.
  • Izvairieties no string, this vai typeof(TypeName) tipu izmantošanas, jo tie var tikt koplietoti vai pieejami ārpusē, kas var novest pie savstarpējām bloķēšanām (deadlocks) vai nepareizas darbības.
  • lock ir sintaktisks cukurs Monitor klases metožu izmantošanai.