En deadlock er en tilstand der to eller flere tråder hver venter evig på en ressurs de andre holder, slik at ingen kan gå videre. Den krever at fire betingelser holder samtidig (Coffman-betingelsene).
En deadlock er en tilstand der to eller flere tråder hver venter evig på en ressurs de andre holder, slik at ingen kan gå videre. Den krever at fire betingelser holder samtidig (Coffman-betingelsene).
Bryt hvilken som helst av dem, 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), trekk deg tilbake og prøv på nytt — bryter hold-and-wait.Deadlocks fryser systemer i det stille — ingen krasj, bare hengende forespørsler. Å navngi de fire betingelsene viser at du kan resonnere om hvorfor det skjer og velge en målrettet forhindring (som regel konsistent låserekkefølge), i stedet for å strø rundt låser og håpe.
Et bibliotek av IT-intervjuspørsmål med detaljerte svar — fra Junior til Senior.
Doner