A deadlock egy állapot, ahol két vagy több thread mindegyike örökre vár egy erőforrásra, amelyet a többi tart, így egyik sem tud haladni. Négy feltétel egyidejű teljesülését igényli (Coffman-feltételek).
A deadlock egy állapot, ahol két vagy több thread mindegyike örökre vár egy erőforrásra, amelyet a többi tart, így egyik sem tud haladni. Négy feltétel egyidejű teljesülését igényli (Coffman-feltételek).
Törd meg bármelyiket, és a deadlock lehetetlen.
Thread 1 tartja A-t, B-t akar ─┐
├─ circular wait → deadlock
Thread 2 tartja B-t, A-t akar ─┘
# DEADLOCK: a threadek ellentétes sorrendben zárolnak
def t1():
with lockA:
with lockB: ... # T1: A majd B
def t2():
with lockB:
with lockA: ... # T2: B majd A ← ciklus!
# JAVÍTÁS: kényszeríts globális zárolási sorrendet (mindig A B előtt)
def safe():
with lockA:
with lockB: ... # mindenki ugyanabban a sorrendben acquire-ol
tryAcquire(timeout), hátrálj és próbáld újra — megtöri a hold-and-waitet.A deadlockok csendben lefagyasztják a rendszereket — nincs összeomlás, csak beragadt kérések. A négy feltétel megnevezése megmutatja, hogy tudsz érvelni arról, miért történik, és célzott megelőzést választani (általában konzisztens zárolási sorrend), ahelyett, hogy lockokat szórnál szét és reménykednél.
IT interjúkérdések gyűjteménye részletes válaszokkal — Juniortól Seniorig.
Adományozás