Un deadlock este o stare în care două sau mai multe thread-uri așteaptă la infinit fiecare o resursă pe care o dețin celelalte, așa că niciunul nu poate avansa. Necesită ca patru condiții să fie îndeplinite simultan (condițiile Coffman).
Un deadlock este o stare în care două sau mai multe thread-uri așteaptă la infinit fiecare o resursă pe care o dețin celelalte, așa că niciunul nu poate avansa. Necesită ca patru condiții să fie îndeplinite simultan (condițiile Coffman).
Rupe oricare dintre ele și deadlock-ul devine imposibil.
Thread 1 deține A, vrea B ─┐
├─ circular wait → deadlock
Thread 2 deține B, vrea A ─┘
# DEADLOCK: thread-urile blochează în ordine opusă
def t1():
with lockA:
with lockB: ... # T1: A apoi B
def t2():
with lockB:
with lockA: ... # T2: B apoi A ← ciclu!
# REMEDIERE: impune o ordine globală a lock-urilor (mereu A înainte de B)
def safe():
with lockA:
with lockB: ... # toți achiziționează în aceeași ordine
tryAcquire(timeout), retrage-te și reîncearcă — rupe hold-and-wait.Deadlock-urile îngheață sistemele în tăcere — fără crash, doar cereri blocate. Numirea celor patru condiții arată că poți raționa despre de ce se întâmplă și poți alege o prevenire țintită (de obicei ordinea consistentă a lock-urilor), în loc să presari lock-uri și să speri.
O bibliotecă de întrebări de interviu IT cu răspunsuri detaliate — de la Junior la Senior.
Donează