Sobes.tech
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:

  1. lock, mutex (monitor) kimi istifadə olunan obyekt kimi qəbul edir.
  2. lock blokunun 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.
  3. Əgər kilid boşdursa, ip onu alır və kodu icra edir.
  4. Ə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.
  5. lock blokundan çı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, readonly olmalıdır.
  • string, this və ya typeof(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, Monitor sinifinin metodlarından istifadə üçün sintaksis şəkəridir.