Sobes.tech
Junior — Middle

Çok iş parçacıklı programlamada synchronized veya lock kullanırken kilitleme mekanizmasının nasıl uygulandığını açıklayabilir misiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

synchronized (Java'da) veya lock (C#'de) kullanırken kilitleme mekanizması, kritik kod bölümüne özel erişimi sağlayan senkronizasyon primitive'lerinin kullanılmasına dayanır.

Bir iş parçacığı lock veya synchronized ile korunan bir bloğa girdiğinde, bu bloğa bağlı nesne kilidini (mutex) almaya çalışır. Eğer kilit boşsa, iş parçacığı onu alır ve yürütmeye devam eder. Eğer kilit başka bir iş parçacığı tarafından alınmışsa, mevcut iş parçacığı kilit serbest bırakılana kadar (bekler) bloke olur.

C#'de lock ile örnek:

private readonly object _lockObj = new object();

void CriticalSection() {
    lock(_lockObj) {
        // sadece bir iş parçacığının aynı anda çalışması gereken kod
    }
}

lock içinde, derleyici Monitor.Enter ve Monitor.Exit metodlarını çağırır, bunlar kilidin alınması ve serbest bırakılmasını yönetir.

Bu şekilde, kilitleme mekanizması, sadece bir iş parçacığının kritik bölümü aynı anda çalışmasını garanti eder, yarış koşullarını önler ve veri bütünlüğünü sağlar.