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:
lockpieņem kā argumentu objektu, kas tiek izmantots kā mutexs (monitorings).- Pirms
lockbloka koda izpildes, pavedienis mēģina iegūt norādītā objekta monopolu. - Ja aizslēgums ir brīvs, pavedienis to iegūst un izpilda kodu.
- 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.
- Iznākot no
lockbloka (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,thisvaitypeof(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. lockir sintaktisks cukursMonitorklases metožu izmantošanai.