Junior
C# dilində lock açar sözünün funksiyası nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Açar söz lock, çox ipli tətbiqlərdə resurslara girişin sinxronlaşdırılması üçün istifadə olunur. Bu, yalnız bir ipin lock blokunun içindəki kodu icra edə biləcəyini təmin edir.
İş prinsipi:
lock, mutex (monitor) kimi istifadə olunan obyekt kimi qəbul edir.lockblokunun içindəki kodu icra etməzdən əvvəl, ip göstərilən obyekt üzərində müstəsna kilid almağa çalışır.- Əgər kilid boşdursa, ip onu alır və kodu icra edir.
- Əgər kilid başqa bir ip tərəfindən tutulursa, cari ip bloklanır (gözləmə vəziyyətinə keçir) və kilid azad olunana qədər gözləyir.
lockblokundan çıxarkən (hətta istisna halında belə), kilid avtomatik olaraq azad edilir.
Bu, ümumi resursları, məsələn, sinif sahələrini, kolleksiyaları və ya digər obyektləri qorumaq üçün istifadə olunur, onlara eyni zamanda bir neçə ip müraciət edə bilər, yarış şəraitlərinin (race conditions) qarşısını almaq və məlumatların bütövlüyünü təmin etmək üçün.
İstifadə nümunəsi:
public class SharedResource
{
private int _counter;
private readonly object _lockObject = new object(); // Sinxronizasiya üçün obyekt
public void Increment()
{
lock (_lockObject) // Kod blokuna müstəsna giriş
{
_counter++; // Ümumi resursun təhlükəsiz dəyişdirilməsi
}
}
public int GetCounter()
{
lock (_lockObject) // Oxuma zamanı da müstəsna giriş
{
return _counter;
}
}
}
Əhəmiyyətli nöqtələr:
- Kilid üçün obyekt referans tipi olmalı və ümumiyyətlə, xarici müdaxiləni qarşısını almaq üçün,
readonlyolmalıdır. string,thisvə yatypeof(TypeName)kimi tipləri kilidləməkdən çəkinin, çünki onlar paylaşılmış və ya xaricdən əlçatan ola bilər, bu da deadlock-lara və ya düzgün olmayan işə səbəb ola bilər.lock,Monitorsinifinin metodlarından istifadə üçün sintaksis şəkəridir.