Deadlock nedir? Oluşması için gereken dört koşul nelerdir ve nasıl önlenir?

Cevap

Deadlock (kilitlenme), iki veya daha fazla thread/process'in, her birinin diğerinin tuttuğu kaynağı beklemesi nedeniyle sonsuza kadar beklemesidir.

import threading
a, b = threading.Lock(), threading.Lock()

def t1():
    with a:
        with b:      # t2 b'yi tutuyorsa bekler
            ...

def t2():
    with b:
        with a:      # t1 a'yı tutuyorsa bekler -> deadlock
            ...

Coffman koşulları (dördü aynı anda sağlanmalı)

  1. Mutual exclusion: kaynak aynı anda yalnızca bir kişi tarafından kullanılabilir.
  2. Hold and wait: bir kaynağı tutarken başka kaynak beklenir.
  3. No preemption: kaynak, sahibinden zorla alınamaz.
  4. Circular wait: bekleyenler döngüsel bir zincir oluşturur (A, B'yi; B, A'yı bekler).

Önleme: koşullardan birini kırmak

Kırılan koşulYöntem
Circular waitTüm kilitleri global sabit bir sırada almak (en pratik çözüm)
Hold and waitGereken tüm kaynakları tek seferde almak
No preemptiontryLock ile zaman aşımı; alınamazsa tutulanları bırakıp tekrar denemek
Mutual exclusionKilitsiz (lock-free) yapılar, değişmez (immutable) veri
def transfer(src, dst, amount):
    first, second = sorted([src, dst], key=lambda acc: acc.id)  # sabit sıra
    with first.lock, second.lock:
        src.balance -= amount
        dst.balance += amount

Diğer yaklaşımlar

  • Kaçınma (avoidance): Banker's algoritması, kaynak tahsisini güvenli durumda tutar; pratikte nadir.
  • Tespit ve kurtarma: bekleme grafiğinde döngü aranır, bir işlem sonlandırılır. Veritabanları bunu yapar: deadlock'ta bir transaction'ı kurban seçip geri alır.

Benzer kavram livelock: thread'ler bloklanmaz ama sürekli birbirine yol verip ilerleyemez.

  1. Concurrency ile parallelism arasındaki fark nedir?Kolayİşletim SistemleriYazılım Müh.
  2. Race condition nedir? Bir örnekle nasıl önleneceğini gösterin.Ortaİşletim SistemleriYazılım Müh.
  3. Context switch nedir? Neden maliyetlidir?Ortaİşletim SistemleriYazılım Müh.
  4. Virtual memory ve paging nasıl çalışır? Page fault nedir?Zorİşletim SistemleriYazılım Müh.
  5. Mutex ile semaphore arasındaki fark nedir?Ortaİşletim SistemleriYazılım Müh.
  6. Process ile thread arasındaki fark nedir?Kolayİşletim SistemleriYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle