Ένα deadlock είναι μια κατάσταση όπου δύο ή περισσότερα threads περιμένουν το καθένα για πάντα έναν πόρο που κρατούν τα άλλα, οπότε κανένα δεν μπορεί να προχωρήσει. Απαιτεί να ισχύουν ταυτόχρονα τέσσερις συνθήκες (συνθήκες Coffman).
Ένα deadlock είναι μια κατάσταση όπου δύο ή περισσότερα threads περιμένουν το καθένα για πάντα έναν πόρο που κρατούν τα άλλα, οπότε κανένα δεν μπορεί να προχωρήσει. Απαιτεί να ισχύουν ταυτόχρονα τέσσερις συνθήκες (συνθήκες Coffman).
Σπάσε οποιαδήποτε μία και το deadlock γίνεται αδύνατο.
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), κάνε back off και retry — σπάει το hold-and-wait.Τα deadlocks παγώνουν συστήματα σιωπηλά — κανένα crash, απλώς κολλημένα requests. Το να κατονομάζεις τις τέσσερις συνθήκες δείχνει ότι μπορείς να συλλογιστείς γιατί συμβαίνει και να επιλέξεις μια στοχευμένη πρόληψη (συνήθως consistent lock ordering), αντί να σκορπίζεις locks και να ελπίζεις.
Μια βιβλιοθήκη ερωτήσεων συνέντευξης IT με αναλυτικές απαντήσεις — από Junior έως Senior.
Δωρεά