Verrou mortel

Définition, exemples et bonnes pratiques

À retenir

  • C'est un blocage circulaire où chaque participant attend une ressource détenue par un autre.
  • Le programme semble "gelé" et ne consomme plus forcément de processeur, mais il ne progresse plus.
  • La solution nécessite souvent de forcer l'arrêt de l'un des processus impliqués.

Un verrou mortel est une situation de blocage total où deux ou plusieurs tâches informatiques s'attendent mutuellement indéfiniment. Imaginez deux personnes arrivant face à face dans un passage étroit : la première attend que la seconde se pousse, tandis que la seconde attend que la première s'écarte. Résultat : plus personne ne peut avancer.

Étymologie

Traduction littérale de l'anglais deadlock. Le terme combine l'idée de verrou (le mécanisme qui réserve une ressource) et l'adjectif mortel pour signifier que l'état de blocage est définitif sans intervention extérieure.

Exemples d'usage

  • Une application de transfert d'argent : l'opération A bloque le compte 1 et attend le compte 2, tandis que l'opération B bloque le compte 2 et attend le compte 1.
  • Deux logiciels tentant d'utiliser simultanément une imprimante et un scanner, chacun ayant réservé l'un des deux périphériques et attendant que l'autre se libère.

Cas d'usage

Ce concept intervient principalement dans le développement multi-thread (programmation parallèle), la gestion des bases de données (transactions concurrentes) et la conception des systèmes d'exploitation qui gèrent l'accès au matériel.

Bonnes pratiques

Pour éviter ce piège, il est recommandé d'acquérir les ressources toujours dans le même ordre défini à l'avance. On peut aussi utiliser des timeouts (délais d'expiration) : si une ressource n'est pas obtenue après quelques secondes, le programme abandonne et réessaie plus tard au lieu d'attendre éternellement.

Synonymes

interblocage étreinte fatale deadlock

Antonymes

exécution fluide libération de ressources

Conseil

Quand vous débutez en programmation système, visualisez vos ressources comme des objets physiques. Si une fonction a besoin de deux ressources, essayez de les obtenir d'un seul coup ou assurez-vous qu'aucune autre partie du code ne tente de les obtenir dans l'ordre inverse.

Questions fréquentes

Quelle est la différence avec un bug classique ?

Contrairement à un plantage (crash), le programme continue de tourner mais reste figé car il attend une condition qui ne se réalisera jamais.

Le système d'exploitation peut-il les détecter ?

Oui, certains systèmes et moteurs de bases de données surveillent les cycles d'attente et tuent automatiquement l'une des tâches pour débloquer la situation.