# Deadlock (Kilitlenme)

Adres: https://softwaredictionary.org/tr/terimler/deadlock
Kategori: İşletim Sistemleri
Son güncelleme: 2026-09-30
Türkçe karşılığı: ölümcül kilitlenme
Okunuşu: dedlok

Kısaca: Deadlock, iki ya da daha fazla thread veya process'in kaynakları bırakmaları için birbirini sonsuza dek beklediği ve hiçbirinin ilerleyemediği durumdur.

## Deadlock (kilitlenme) nedir?

Deadlock, bir grup thread veya process'in her biri bir kaynağı tutarken grubun başka bir üyesinin tuttuğu bir kaynağı beklediğinde ortaya çıkar. Her katılımcı bir başkasını beklediği için kimse devam edemez ve program çökmeden ya da hata bildirmeden donar.

Deadlock yalnızca Coffman koşulları denen dört koşul aynı anda doğru olduğunda oluşabilir: karşılıklı dışlama (bir kaynak yalnızca tek bir taraf tarafından tutulabilir), tut ve bekle (bir taraf başka bir kaynağı beklerken birini tutar), kesintisizlik (kaynaklar zorla geri alınamaz) ve döngüsel bekleme (her birinin bir sonrakini beklediği bir taraflar döngüsü). Herhangi birini kırmak deadlock'u önler. En yaygın pratik çözüm, her thread'in kilitleri aynı genel sırayla almasını sağlamaktır; bu döngüsel beklemeyi ortadan kaldırır.

Dar, tek şeritli bir köprünün ortasında karşılıklı uçlardan buluşan iki arabayı düşünün. Her sürücü diğerinin geri çekilmesini bekler ve kimse kıpırdamaz. Deadlock'lar kilit kullanan çok thread'li programlarda, iki transaction aynı satırları ters sırayla kilitlediğinde veritabanlarında ve paylaşılan aygıtları yöneten işletim sistemlerinde görülür.

Deadlock çoğu zaman livelock ve starvation ile karıştırılır. Deadlock'ta taraflar hiçbir şey yapmadan takılıp kalır; livelock'ta ise gerçek bir ilerleme kaydetmeden birbirine etkin biçimde tepki vermeye devam ederler. Starvation ise sistemin bütünü hâlâ hareket etse bile, diğerleri kaynağı hep önce aldığı için bir tarafın süresiz beklemesi demektir.

## Önemli noktalar

- Deadlock, her birinin bir başkasının tuttuğu kaynağı beklediği bir taraflar döngüsüdür.
- Karşılıklı dışlama, tut ve bekle, kesintisizlik ve döngüsel bekleme gerektirir.
- Kilitleri tutarlı bir sırayla almak onu önlemenin en yaygın yoludur.
- Zaman aşımları ve deadlock tespiti, veritabanları gibi sistemlerin bir tarafı iptal ederek toparlanmasını sağlar.
- Deadlock, tarafların ilerleme kaydetmeden meşgul kaldığı livelock'tan farklıdır.

## Örnek: Python'da deadlock'a girebilecek iki thread

```python
import threading

lock_a = threading.Lock()
lock_b = threading.Lock()

def task_1():
    with lock_a:      # Holds A...
        with lock_b:  # ...then waits for B
            print("task 1 done")

def task_2():
    with lock_b:      # Holds B...
        with lock_a:  # ...then waits for A: possible deadlock!
            print("task 2 done")
# Fix: make both tasks acquire lock_a before lock_b.
```

## Sık sorulan sorular

**Veritabanları deadlock'ları nasıl ele alır?**

Çoğu ilişkisel veritabanı, bekleyen transaction'lar arasındaki döngüleri arayarak deadlock'ları otomatik olarak tespit eder. Ardından transaction'lardan birini iptal eder ve bir hata döndürür; böylece uygulama onu yeniden deneyebilir.

**Kodumda deadlock'ları nasıl önleyebilirim?**

Birden fazla kilidi her yerde aynı sabit sırayla alın, kilitleri mümkün olduğunca kısa süre tutun ve onları alırken zaman aşımı kullanın. Kuyruklar ya da değişmez (immutable) veri gibi üst düzey araçlar da kilit ihtiyacını azaltabilir.

**Deadlock ile yarış durumu (race condition) arasındaki fark nedir?**

Deadlock'ta thread'ler birbirini bekleyerek sonsuza dek bloke olur, bu yüzden program ilerlemeyi durdurur. Yarış durumunda thread'ler paylaşılan veriye uygun koordinasyon olmadan erişir; program çalışmaya devam eder ancak yanlış sonuçlar üretebilir.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
