Deadlock — puzzle d’ordre des verrous

Réordonnez la prise des verrous pour qu’aucun thread n’attende indéfiniment. Un puzzle sur la règle de l’ordre global des verrous.

Niveau 1/5Glissez les verrous ou utilisez ← →

Réordonnez chaque thread pour qu’aucun n’attende un autre indéfiniment.

T1prend
  1. 🔒 A
  2. 🔒 B
T2prend
  1. 🔒 B
  2. 🔒 A
Comment jouer
  • Chaque ligne est un thread, et les jetons sont les verrous qu’il prend, de gauche à droite.
  • Faites glisser un jeton (ou utilisez les flèches) pour changer l’ordre de prise des verrous.
  • Si deux threads prennent la même paire dans l’ordre inverse, ils peuvent se figer à jamais. La solution est un ordre global unique respecté par tous — appuyez sur Exécuter pour vérifier.

Comment ça marche

Chaque ligne est un thread et chaque jeton un verrou qu’il prend, de gauche à droite. Si deux threads prennent la même paire dans l’ordre inverse, il existe un entrelacement où chacun en détient un et attend l’autre — et plus rien n’avance. Appuyez sur Exécuter : le graphe d’attente est vérifié, et s’il contient un cycle les verrous fautifs s’allument en rouge. La solution est la règle des vraies bases de code : choisir un ordre global de verrous et s’y tenir partout.

Un puzzle pédagogique. Il modélise les cycles de détention et attente, la condition d’interblocage qu’on peut éliminer par conception ; les vrais systèmes ajoutent délais, structures sans verrou et doivent penser au livelock.

Questions fréquentes

Qu’est-ce qui provoque réellement un interblocage ici ?

Un cycle dans le graphe d’attente. Si le thread 1 détient A et veut B pendant que le thread 2 détient B et veut A, les deux attendent pour toujours. Le jeu dessine exactement ce cycle.

Pourquoi trier les verrous règle-t-il le problème ?

Si tous les threads prennent les verrous dans le même ordre global, un cycle est impossible : un thread ne peut attendre qu’un verrou postérieur à ceux qu’il détient, donc le graphe reste acyclique. C’est la règle classique de hiérarchie des verrous.

Est-ce ainsi qu’on détecte les vrais interblocages ?

La détection de cycle est l’idée employée par les détecteurs d’inversion d’ordre comme ThreadSanitizer. Les vrais outils observent l’ordre à l’exécution ; ici vous voyez tout le graphe d’un coup.

Outils associés

Intégrer ce jeu

Ajoutez ce jeu gratuit à votre site :