Sobes.tech
Junior

C# dilinde lock anahtar kelimesinin işlevi nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Anahtar kelime lock, çok iş parçacıklı uygulamalarda kaynaklara erişimi senkronize etmek için kullanılır. Bu, yalnızca bir iş parçacığının belirli bir anda lock bloğu içindeki kodu çalıştırmasını garanti eder.

Çalışma prensibi:

  1. lock, bir nesne alır ve bu nesne mutex (monitor) olarak kullanılır.
  2. lock içindeki kodu çalıştırmadan önce, iş parçacığı belirtilen nesne üzerinde tekil bir kilit almaya çalışır.
  3. Eğer kilit boşsa, iş parçacığı onu alır ve kodu çalıştırır.
  4. Eğer kilit başka bir iş parçacığı tarafından tutuluyorsa, mevcut iş parçacığı kilit serbest bırakılana kadar bekler (bekleme durumuna geçer).
  5. lock bloğundan çıkarken (istisna durumunda bile), kilit otomatik olarak serbest bırakılır.

Bu, sınıf alanları, koleksiyonlar veya aynı anda erişilebilecek diğer nesneler gibi paylaşılan kaynakları korumak için kullanılır, böylece yarış durumları (race conditions) önlenir ve veri bütünlüğü sağlanır.

Kullanım örneği:

public class SharedResource
{
    private int _counter;
    private readonly object _lockObject = new object(); // Senkronizasyon nesnesi

    public void Increment()
    {
        lock (_lockObject) // Kod bloğuna tekil erişim
        {
            _counter++; // Paylaşılan kaynağın güvenli değişimi
        }
    }

    public int GetCounter()
    {
        lock (_lockObject) // Okuma sırasında da tekil erişim
        {
            return _counter;
        }
    }
}

Önemli noktalar:

  • Kilitlenmek için nesne referans tipi olmalı ve genellikle dış müdahaleyi önlemek için özel alan (readonly) olmalıdır.
  • string, this veya typeof(TypeName) gibi türleri kilitlemekten kaçının, çünkü bunlar paylaşılabilir veya dışarıdan erişilebilir olabilir, bu da deadlock'lara veya hatalı çalışmaya yol açabilir.
  • lock, Monitor sınıfının metodlarını kullanmak için sözdizimi şekeridir.