← Retour aux projets

Philosophers

Le dîner des philosophes en C : threads, mutex et ordonnancement sans famine, sans la moindre situation de compétition.

Période
31/10/2022
Catégorie
42
Domaine
Systèmes
Note
100
Technologies
  • C
  • Threads
Liens

Le problème du dîner des philosophes, en C, avec des threads et des mutex.

Le problème

Des philosophes sont attablés, avec une fourchette entre chaque paire de voisins. Manger en demande deux : un philosophe ne peut donc manger que pendant que ses deux voisins réfléchissent. Chacun suit le même cycle : prendre les deux fourchettes, manger, les reposer, dormir, réfléchir. Si l’un reste trop longtemps sans manger, il meurt et la simulation s’arrête.

Le programme

./philo <philosophes> <temps_pour_mourir> <temps_pour_manger> <temps_pour_dormir> [repas] lance un thread par philosophe et un mutex par fourchette. Le dernier argument, facultatif, arrête la simulation une fois que tout le monde a mangé ce nombre de fois ; sans lui, elle tourne jusqu’à ce qu’un philosophe meure.

Ce que j’en ai tiré

Les threads, les mutex et la rigueur qu’ils imposent : une situation de compétition ne se voit pas aux tests, elle se voit une fois, au bout de plusieurs heures, sur une machine qui n’est pas la vôtre. Le timing est toute la difficulté — un philosophe qui meurt une milliseconde trop tard, et le projet est raté.