Deadlock je stav, kdy dvě nebo více vláken navždy čekají na zdroj, který drží ti ostatní, takže žádné nemůže pokračovat. Vyžaduje, aby současně platily čtyři podmínky (Coffmanovy podmínky).
Deadlock je stav, kdy dvě nebo více vláken navždy čekají na zdroj, který drží ti ostatní, takže žádné nemůže pokračovat. Vyžaduje, aby současně platily čtyři podmínky (Coffmanovy podmínky).
Zrušte kteroukoli jednu a deadlock je nemožný.
Vlákno 1 drží A, chce B ─┐
├─ kruhové čekání → deadlock
Vlákno 2 drží B, chce A ─┘
# DEADLOCK: vlákna zamykají v opačném pořadí
def t1():
with lockA:
with lockB: ... # T1: A pak B
def t2():
with lockB:
with lockA: ... # T2: B pak A ← cyklus!
# OPRAVA: zaveď globální pořadí zamykání (vždy A před B)
def safe():
with lockA:
with lockB: ... # každý získává ve stejném pořadí
tryAcquire(timeout), ustup a opakuj — ruší hold-and-wait.Deadlocky zamrazí systémy tiše — žádný pád, jen zaseknuté požadavky. Pojmenování čtyř podmínek ukazuje, že umíte uvažovat o tom, proč k tomu dochází, a zvolit cílenou prevenci (obvykle konzistentní pořadí zamykání), místo sypání zámků a doufání.
Knihovna IT otázek k pohovoru s podrobnými odpověďmi — od Junior po Senior.
Přispět