İçeriğe geç
parazade

Deadlock Ne Demek?

Yayın: · Son güncelleme:

Deadlock Ne Demek? Kısaca

Deadlock, iki ya da daha fazla işlemin birbirinin elindeki kaynağı beklediği ve hiçbirinin ilerleyemediği kilitlenme durumudur. Program hata vermeden donar ve dışarıdan müdahale edilmezse bu hâlde kalır.

Deadlock nedir?
İçindekiler
  1. Deadlock ne demek?
  2. Nasıl oluşur?
  3. Oluşma koşulları
  4. Nasıl önlenir?

Deadlock ne demek?

Deadlock, Türkçede kilitlenme ya da ölümcül kilitlenme olarak çevrilir. İki işlem, her biri diğerinin tuttuğu bir kaynağı beklediği için sonsuza kadar durur. Program çökmez, hata mesajı da vermez; sadece hiçbir şey yapmaz.

Nasıl oluşur?

Dar bir köprünün iki ucundan aynı anda giren iki aracı düşünün. Biri geri çekilmeden diğeri geçemez, ikisi de geri çekilmezse yol hiç açılmaz. Yazılımda köprünün yerini dosya, veritabanı satırı ya da bellekteki bir kilit alır.

Örneğin bir bankacılık uygulamasında A thread'i önce Hesap 1'i, sonra Hesap 2'yi kilitlemek istesin. Aynı anda B thread'i önce Hesap 2'yi, sonra Hesap 1'i kilitlesin. A, Hesap 1'i; B, Hesap 2'yi aldıktan sonra ikisi de diğerini bekler ve transfer hiç tamamlanmaz.

Oluşma koşulları

Deadlock için genellikle dört koşulun birlikte bulunması gerekir:

  • Kaynak aynı anda yalnız bir işlem tarafından kullanılabilir.
  • İşlem, bir kaynağı tutarken başka bir kaynak bekler.
  • Kaynak, sahibinden zorla alınamaz.
  • İşlemler döngüsel bir bekleme zinciri oluşturur.

Nasıl önlenir?

En pratik yöntem, kaynakları her zaman aynı sırayla kilitlemektir. Yukarıdaki örnekte iki thread de önce küçük numaralı hesabı kilitleseydi döngü oluşmazdı. Kilitlere zaman aşımı koymak ve kilidi olabildiğince kısa tutmak da riski azaltır. Veritabanlarında deadlock hatası alırsanız, hata veren işlemi kısa bir beklemeden sonra yeniden denemek yaygın bir çözümdür.

Sıkça Sorulan Sorular

Deadlock nedir, kısaca?

Deadlock, iki işin karşılıklı olarak birbirini beklemesi yüzünden ikisinin de durduğu kilitlenmedir. Kimse elindeki kaynağı bırakmadığı için bekleme hiç bitmez.

Veritabanında deadlock olur mu?

Evet. İki transaction farklı satırları kilitleyip birbirinin satırını beklerse deadlock oluşur. Çoğu veritabanı bunu algılayıp işlemlerden birini iptal eder.

İlgili terimler