Mrtva zanka je stanje, kjer dve ali več niti vsaka večno čaka na vir, ki ga drži druga, tako da nobena ne more nadaljevati. Zahteva, da hkrati veljajo štirje pogoji (Coffmanovi pogoji).
Mrtva zanka je stanje, kjer dve ali več niti vsaka večno čaka na vir, ki ga drži druga, tako da nobena ne more nadaljevati. Zahteva, da hkrati veljajo štirje pogoji (Coffmanovi pogoji).
Prekinite katerega koli in mrtva zanka je nemogoča.
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), umik in ponovni poskus — prekine drži-in-čakaj.Mrtve zanke tiho zamrznejo sisteme — brez sesutja, le viseče zahteve. Poimenovanje štirih pogojev pokaže, da znate razmišljati o tem, zakaj se to zgodi, in izbrati ciljno usmerjeno preprečevanje (običajno konsistenten vrstni red zaklepanja), namesto da posipate zaklepe in upate.
Knjižnica IT vprašanj za razgovore s podrobnimi odgovori — od začetnika do izkušenega.
Doniraj