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:
lockprihvaća kao argument objekt koji se koristi kao mutex (monitor).- Prije izvršavanja koda unutar
lockbloka, nit pokušava dobiti isključivu blokadu na zadani objekt. - Ako je blokada slobodna, nit je dobiva i izvršava kod.
- Ako je blokada zauzeta od strane druge niti, trenutna nit se blokira (prelazi u stanje čekanja) dok se blokada ne oslobodi.
- Pri izlasku iz
lockbloka (č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,thisilitypeof(TypeName), jer mogu biti zajednički korišteni ili dostupni izvana, što može dovesti do deadlockova ili neispravnog rada. lockje sintaktički šećer za korištenje metoda klaseMonitor.