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:
lock, bir nesne alır ve bu nesne mutex (monitor) olarak kullanılır.lockiçindeki kodu çalıştırmadan önce, iş parçacığı belirtilen nesne üzerinde tekil bir kilit almaya çalışır.- Eğer kilit boşsa, iş parçacığı onu alır ve kodu çalıştırır.
- 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).
lockbloğ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,thisveyatypeof(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,Monitorsınıfının metodlarını kullanmak için sözdizimi şekeridir.