Un deadlock est un état où deux threads ou plus attendent chacun indéfiniment une ressource détenue par les autres, si bien qu'aucun ne peut avancer. Il exige que quatre conditions soient réunies simultanément (conditions de Coffman).
Un deadlock est un état où deux threads ou plus attendent chacun indéfiniment une ressource détenue par les autres, si bien qu'aucun ne peut avancer. Il exige que quatre conditions soient réunies simultanément (conditions de Coffman).
Brisez l'une d'elles et le deadlock devient impossible.
Thread 1 détient A, veut B ─┐
├─ attente circulaire → deadlock
Thread 2 détient B, veut A ─┘
# DEADLOCK : les threads verrouillent dans des ordres opposés
def t1():
with lockA:
with lockB: ... # T1 : A puis B
def t2():
with lockB:
with lockA: ... # T2 : B puis A ← cycle !
# CORRECTIF : imposez un ordre de verrouillage global (toujours A avant B)
def safe():
with lockA:
with lockB: ... # tout le monde acquiert dans le même ordre
tryAcquire(timeout), temporisez et réessayez — brise la détention et attente.Les deadlocks figent les systèmes silencieusement — pas de crash, juste des requêtes suspendues. Nommer les quatre conditions montre que vous savez raisonner sur pourquoi cela arrive et choisir une prévention ciblée (généralement un ordre de verrouillage cohérent), plutôt que de parsemer des verrous en espérant.
Une bibliothèque de questions d'entretien IT avec des réponses détaillées — du Junior au Senior.
Faire un don