.. | ||
.gitignore | ||
Makefile | ||
philosophe.c | ||
README.md |
Synchonisation - Dîner des philosophes
Principe
Ce paradigme modélise l’ordonnancement des processus et l’allocation des ressources critiques à ces derniers.
La résolution de ce problème met en œuvre 2 techniques d’utilisations différentes des sémaphores : l’exclusion mutuelle classique mais aussi la possibilité de bloquer un processus grâce à un sémaphore privé.
- N philosophes assis autour d’une table.
- Une fourchette entre chaque paire de voisins.
- Pour manger, un philosophe a besoin de deux fourchettes.
- Comment assurer que les philosophes vont pouvoir manger ?
Chaque philosophe passe par les états suivants :
- Penser (sans interaction avec les autres),
- Essayer de manger, et pour cela attraper une des fourchettes à sa disposition, puis l’autre et ce dans l’ordre souhaité.
- Déposer les fourchettes.
Ce qui peut arriver
Interblocage : chaque philosophe tient sa fourchette de gauche et attend la deuxième.
- Idée : obliger les philosophes à reposer la fourchette au bout d’un certain temps si la deuxième n’est pas libre.
- mais... on peut avoir un cycle infini sans que personne ne mange :
- chaque philosophe prend la fourchette de gauche
- puis chaque philosophe la repose
- puis chaque philosophe prend la fourchette de droite
- ...
Solutions
- Un serveur : chaque philosophe lui demande la permission avant de prendre une fourchette.
- Hiérarchie des ressources : les fourchettes sont numérotées et chaque philosophe prend d’abord la fourchette avec le plus grand numéro.
- "Right left dining philosophers" : les philosophes sont numérotés et prennent en premier la fourchette de gauche ou de droite suivant leur parité.
- Ne donner à un philosophe ses baguettes que si elles sont TOUTES DEUX disponibles.