
Ölü kilit (deadlock), bilgisayar bilimlerinde, özellikle işletim sistemleri ve eşzamanlı programlama alanlarında, birden fazla işlem veya iş parçacığının (thread) kaynaklara erişim için birbirini beklemesi ve bu nedenle hiçbirinin ilerleyememesi durumudur. Bu durum, sistemin kilitlenmesine yol açarak işlemlerin tamamlanmasını engeller. Ölü kilit, genellikle paylaşılan kaynakların (örneğin, bellek, dosya veya veritabanı kilitleri) yanlış yönetilmesi sonucu ortaya çıkar ve modern bilgi işlem sistemlerinde performans ve güvenilirlik açısından ciddi bir sorundur. Karışıklık matrisi gibi değerlendirme araçlarının aksine, ölü kilit oluşumu doğrudan sistem tasarımı ve kaynak yönetimi ile ilgilidir. Bu makale, ölü kilit oluşumunun nedenlerini, koşullarını, önleme yöntemlerini ve çözüm yaklaşımlarını detaylı bir şekilde ele almaktadır.
Ölü kilit, birden fazla işlemin veya iş parçacığının aynı anda belirli kaynaklara erişmeye çalışması ve bu kaynaklara erişim sırasında birbirlerini engellemesiyle meydana gelir. Örneğin, bir işlem bir kaynağı kilitlemişse ve başka bir kaynağa ihtiyaç duyuyorsa, ancak ikinci kaynak başka bir işlem tarafından kilitlenmişse, her iki işlem de ilerleyemez. Bu durum, sistemde bir döngüsel bekleme (circular wait) oluşturur ve işlemlerin tamamlanması mümkün olmaz.
Ölü kilit oluşumu için dört temel koşulun aynı anda gerçekleşmesi gerekir, bunlar Coffman koşulları olarak bilinir:
Bu dört koşulun tamamı gerçekleştiğinde ölü kilit kaçınılmazdır. Ölü kilit oluşumunu anlamak ve önlemek için bu koşulların her birini ayrı ayrı incelemek önemlidir.

İki işlemin (P1 ve P2) iki kaynağı (R1 ve R2) tutarak ve birbirinin kaynağını bekleyerek oluşturduğu bir ölü kilit senaryosunu gösteren diyagram. (Görsel yapay zeka tarafından üretilmiştir.)
Ölü kilitler, özellikle çoklu iş parçacığı veya süreç içeren sistemlerde yaygın olarak görülür. Aşağıda, ölü kilit oluşumuna yol açan yaygın senaryolar ve örnekler sunulmaktadır.
İşletim sistemlerinde, süreçler genellikle dosya, bellek veya giriş/çıkış aygıtları gibi kaynaklara erişim için yarışır. Örneğin, iki süreç (P1 ve P2) iki kaynağı (R1 ve R2) kullanıyorsa ve P1, R1’i kilitleyip R2’yi beklerken, P2, R2’yi kilitleyip R1’i bekliyorsa, bir ölü kilit oluşur. Bu durum, özellikle veritabanı sistemlerinde kilitlenme (locking) mekanizmalarında sıkça karşılaşılan bir sorundur.
Veritabanı yönetim sistemlerinde, işlemler (transactions) aynı anda birden fazla tabloya veya satıra erişmeye çalıştığında ölü kilit oluşabilir. Örneğin, bir işlem bir tabloyu güncellerken başka bir tabloya erişmek için bekliyorsa ve ikinci işlem tam tersi bir kilit sırası izliyorsa, her iki işlem de kilitlenir. Modern veritabanı sistemleri, bu tür durumları tespit etmek ve çözmek için ölü kilit algılama algoritmaları kullanır.
Eşzamanlı programlamada, özellikle çok iş parçacıklı uygulamalarda, kilit (lock) mekanizmaları yanlış kullanıldığında ölü kilitler oluşabilir. Örneğin, Java’da iki iş parçacığı, birbirinin sahip olduğu bir monitörü (monitor) beklediğinde ölü kilit meydana gelebilir. Aşağıdaki basit bir Java kodu örneği, ölü kilit oluşumunu göstermektedir:
Bu kodda, iki iş parçacığı farklı sıralarda iki kaynağı kilitlemeye çalışır ve bu, bir ölü kilit durumuna yol açar.
Ölü kilitlerin oluşmasını önlemek veya çözmek için çeşitli stratejiler geliştirilmiştir. Bu stratejiler, sistem tasarımına ve uygulama alanına bağlı olarak farklılık gösterir.
Ölü kilit önleme, Coffman koşullarından en az birinin gerçekleşmesini engelleyerek ölü kilit oluşumunu tamamen ortadan kaldırmayı amaçlar:
Bazı sistemler, ölü kilitleri önlemek yerine algılamayı ve kurtarmayı tercih eder. Ölü kilit algılama, kaynak tahsis grafikleri (resource allocation graphs) veya bekleme zincirleri analizi gibi yöntemlerle gerçekleştirilir. Algılandığında, sistem genellikle bir işlemi sonlandırarak veya kaynakları serbest bırakarak kurtarma yapar. Örneğin, veritabanı sistemlerinde bir işlem geri alınabilir (rollback) ve yeniden başlatılabilir.
Ölü kilitten kaçınma, kaynak tahsis kararlarını dinamik olarak değerlendirerek yapılır. Bankacı Algoritması (Banker’s Algorithm), işletim sistemlerinde bu amaçla kullanılan ünlü bir yöntemdir. Bu algoritma, kaynak taleplerini analiz ederek sistemin güvenli bir durumda kalmasını sağlar.
Ölü kilit yönetimi, sistem performansını ve karmaşıklığını etkileyebilir. Örneğin, önleme yöntemleri kaynak kullanımını verimsiz hale getirebilir veya sistem tasarımını karmaşıklaştırabilir. Algılama ve kurtarma yöntemleri ise ek hesaplama yükü getirir ve işlemlerin sonlandırılması veri kaybına yol açabilir. Ayrıca, gerçek zamanlı sistemlerde ölü kilitlerin hızlı bir şekilde çözülmesi kritik önem taşır.

Henüz Tartışma Girilmemiştir
"Ölü Kilit (Deadlock) Oluşumu" maddesi için tartışma başlatın
Ölü Kilit Oluşumunun Temelleri
Ölü Kilit Oluşumunun Koşulları
Ölü Kilit Oluşumunun Nedenleri ve Örnekleri
İşletim Sistemlerinde Ölü Kilit
Veritabanı Sistemlerinde Ölü Kilit
Programlama Düzeyinde Ölü Kilit
Ölü Kilit Önleme ve Çözüm Yöntemleri
Ölü Kilit Önleme
Ölü Kilit Algılama ve Kurtarma
Ölü Kilitten Kaçınma
Sınırlamalar ve Dikkat Edilmesi Gerekenler
Bu madde yapay zeka desteği ile üretilmiştir.