Ein Deadlock ist ein Zustand, in dem zwei oder mehr Threads jeweils ewig auf eine Ressource warten, die die anderen halten, sodass keiner fortfahren kann. Er erfordert, dass vier Bedingungen gleichzeitig gelten (Coffman-Bedingungen).
Ein Deadlock ist ein Zustand, in dem zwei oder mehr Threads jeweils ewig auf eine Ressource warten, die die anderen halten, sodass keiner fortfahren kann. Er erfordert, dass vier Bedingungen gleichzeitig gelten (Coffman-Bedingungen).
Brich eine einzige davon, und ein Deadlock ist unmöglich.
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), zurückweichen und erneut versuchen — bricht Hold-and-Wait.Deadlocks frieren Systeme still ein — kein Absturz, nur hängende Requests. Die vier Bedingungen zu benennen zeigt, dass du darüber nachdenken kannst, warum es passiert, und eine gezielte Prävention wählst (meist konsistente Sperrreihenfolge), statt Locks zu verstreuen und zu hoffen.
Eine Sammlung von IT-Interviewfragen mit ausführlichen Antworten — vom Junior bis zum Senior.
Spenden