Un deadlock è uno stato in cui due o più thread aspettano per sempre una risorsa detenuta dagli altri, così nessuno può procedere. Richiede che quattro condizioni valgano simultaneamente (condizioni di Coffman).
Un deadlock è uno stato in cui due o più thread aspettano per sempre una risorsa detenuta dagli altri, così nessuno può procedere. Richiede che quattro condizioni valgano simultaneamente (condizioni di Coffman).
Rompi una qualsiasi di esse e il deadlock diventa impossibile.
Thread 1 detiene A, vuole B ─┐
├─ attesa circolare → deadlock
Thread 2 detiene B, vuole A ─┘
# DEADLOCK: i thread fanno lock in ordini opposti
def t1():
with lockA:
with lockB: ... # T1: prima A poi B
def t2():
with lockB:
with lockA: ... # T2: prima B poi A ← ciclo!
# SOLUZIONE: imponi un ordine globale dei lock (sempre A prima di B)
def safe():
with lockA:
with lockB: ... # tutti acquisiscono nello stesso ordine
tryAcquire(timeout), backoff e riprova — rompe l'hold-and-wait.I deadlock congelano i sistemi silenziosamente — nessun crash, solo richieste appese. Nominare le quattro condizioni dimostra che sai ragionare sul perché accade e scegliere una prevenzione mirata (di solito l'ordine coerente dei lock), invece di cospargere lock a caso e sperare.
Una raccolta di domande di colloquio IT con risposte dettagliate — da Junior a Senior.
Dona