efrei/programmation-multitaches-temps-reel/philosophes
2022-09-07 14:16:04 +02:00
..
.gitignore Finish philosophe 2022-09-07 14:01:18 +02:00
Makefile Add Makefile 2022-09-07 14:03:20 +02:00
philosophe.c Return void pointer 2022-09-07 14:16:04 +02:00
README.md

Synchonisation - Dîner des philosophes

Principe

Ce paradigme modélise lordonnancement des processus et lallocation des ressources critiques à ces derniers.

La résolution de ce problème met en œuvre 2 techniques dutilisations différentes des sémaphores : lexclusion mutuelle classique mais aussi la possibilité de bloquer un processus grâce à un sémaphore privé.

  • N philosophes assis autour dune 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 lautre et ce dans lordre 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 dun certain temps si la deuxième nest 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 dabord 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.