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.
Réordonnez chaque thread pour qu’aucun n’attende un autre indéfiniment.
- 🔒 A
- 🔒 B
- 🔒 B
- 🔒 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.