En deadlock er en tilstand, hvor to eller flere tråde hver især venter for evigt på en ressource, som de andre holder, så ingen kan fortsætte. Den kræver, at fire betingelser holder samtidigt (Coffman-betingelserne).
En deadlock er en tilstand, hvor to eller flere tråde hver især venter for evigt på en ressource, som de andre holder, så ingen kan fortsætte. Den kræver, at fire betingelser holder samtidigt (Coffman-betingelserne).
Bryd bare én, og deadlock er umulig.
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), træk dig tilbage og prøv igen — bryder hold-and-wait.Deadlocks fryser systemer tavst — intet crash, bare hængende requests. At kunne navngive de fire betingelser viser, at du kan ræsonnere om hvorfor det sker og vælge en målrettet forebyggelse (som regel konsistent lock-rækkefølge) i stedet for at drysse locks ud og håbe.
Et bibliotek af IT-interviewspørgsmål med detaljerede svar — fra Junior til Senior.
Donér