Philosophers
Le dîner des philosophes en C : threads, mutex et ordonnancement sans famine, sans la moindre situation de compétition.
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é.