module · dîner des philosophes · 12 min

Cinq philosophes, cinq fourchettes, un risque d'interblocage.

Cinq philosophes autour d'une table ronde. Entre chaque paire de voisins, une seule fourchette — cinq fourchettes pour cinq philosophes. Pour manger ses spaghettis, un philosophe doit tenir ses deux fourchettes en même temps : celle à sa gauche et celle à sa droite. Mais chaque fourchette est partagée avec un voisin — si je prends la mienne à gauche, mon voisin de gauche ne peut plus prendre la sienne à droite. Quand tous ont faim d'un coup et saisissent leur gauche, chacun attend une droite que le voisin ne lâchera jamais : c'est l'interblocage.

bac à sable
stratégie · naïve

Chacun prend sa fourchette gauche, puis attend la droite. Comme tous ont faim en même temps, tous tiennent leur gauche et attendent une droite que le voisin ne lâchera jamais.

ne casse aucune condition → interblocage

×3
tick 0
spaghettisF0F1F2F3F4😋P0 · 0🍝😋P1 · 0🍝😋P2 · 0🍝😋P3 · 0🍝😋P4 · 0🍝

repas servis

0

deadlocks

0

min repas

0

inspection des ressources

  • P0hungry
  • P1hungry
  • P2hungry
  • P3hungry
  • P4hungry

légende · il faut 2 fourchettes pour manger

  • 🤔 pense · ne cherche pas à manger (0 fourchette)
  • 😋 a faim · cherche ses 2 fourchettes (0 fourchette)
  • bloqué · tient 1 fourchette, attend la 2ᵉ (chez un voisin)
  • 🍝 mange · tient ses 2 fourchettes
défi · casser l'interblocage
palier 1 / 3

Lancer la stratégie naïve et observer la table se figer. Se servir ensuite de l'inspection pour comprendre : qui tient quelle fourchette, qui attend laquelle, et pourquoi personne ne peut avancer.

table figée

état · stratégie naïve · graine 42

tick 0deadlocks 0

Pilote la table depuis le bac à sable ci-dessus — laissez la stratégie naïve et changez de graine jusqu'à figer la table.

à retenir
  • Un interblocage (deadlock) survient quand un ensemble de processus attendent chacun une ressource détenue par un autre du même ensemble — personne ne peut avancer.
  • Les 4 conditions de Coffman sont nécessaires : exclusion mutuelle, détention + attente, pas de préemption, attente circulaire.
  • Casser une seule de ces conditions suffit pour éviter le deadlock — d'où les stratégies asymétrie (brise l'attente circulaire), serveur (limite à 4) et tout-ou-rien (brise la détention-et-attente).
  • Éviter le deadlock ne suffit pas : les stratégies sûres n'ont pas le même débit. Limiter les mangeurs (serveur) protège mais ralentit ; ne jamais garder une fourchette inutile (tout-ou-rien) libère la ressource et sert plus de repas.
  • Le vrai problème système d'exploitation : ce sont des threads qui se partagent des verrous (mutex), pas des philosophes. La métaphore facilite l'intuition.
retour au labo