Deadlock, iki veya daha fazla thread'in her birinin diğerlerinin tuttuğu bir kaynağı sonsuza dek beklediği ve hiçbirinin ilerleyemediği bir durumdur. Aynı anda dört koşulun sağlanmasını gerektirir (Coffman koşulları).
Deadlock, iki veya daha fazla thread'in her birinin diğerlerinin tuttuğu bir kaynağı sonsuza dek beklediği ve hiçbirinin ilerleyemediği bir durumdur. Aynı anda dört koşulun sağlanmasını gerektirir (Coffman koşulları).
Herhangi birini kırın ve deadlock imkansız olur.
Thread 1 holds A, wants B ─┐
├─ circular wait → deadlock
Thread 2 holds B, wants A ─┘
# DEADLOCK: threads lock in opposite orders
def t1():
with lockA:
with lockB: ... # T1: A then B
def t2():
with lockB:
with lockA: ... # T2: B then A ← cycle!
# FIX: impose a global lock ordering (always A before B)
def safe():
with lockA:
with lockB: ... # everyone acquires in the same order
tryAcquire(timeout), geri çekil ve yeniden dene — hold-and-wait'i kırar.Deadlock'lar sistemleri sessizce dondurur — çökme yok, sadece takılı istekler. Dört koşulu adlandırmak, neden olduğunu akıl yürütebildiğinizi ve kilit serpiştirip umut etmek yerine hedeflenmiş bir önleme (genellikle tutarlı lock ordering) seçebildiğinizi gösterir.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap