1.7 KiB
1.7 KiB
Philosophers
Description
Philosophers est un projet de l'École 42 basé sur le célèbre problème des philosophes mangeurs. Il traite de la programmation concurrente avec des threads et des mutex pour éviter les deadlocks et les race conditions.
Le problème
5 philosophes sont assis autour d'une table circulaire avec un plat de spaghetti au centre. Il y a une fourchette entre chaque philosophe. Pour manger, un philosophe doit prendre les deux fourchettes adjacentes.
Fonctionnalités
- Simulation temps réel avec threads
- Gestion des mutex pour les fourchettes
- Prévention des deadlocks
- Monitoring de l'état des philosophes
- Optimisation pour éviter la famine
- Logs timestampés des actions
Technologies utilisées
- Langage : C
- Threading : pthread library
- Synchronisation : mutex, semaphores
- Timing : gettimeofday()
Installation
git clone <repository-url>
cd Philosophers
make
./philo [nb_philo] [time_to_die] [time_to_eat] [time_to_sleep] [nb_must_eat]
Exemple d'utilisation
./philo 5 800 200 200 3
# 5 philosophes, meurent après 800ms, mangent en 200ms, dorment 200ms, 3 repas chacun
États des philosophes
- 🍴 Eating - En train de manger
- 😴 Sleeping - En train de dormir
- 🤔 Thinking - En train de réfléchir
- ⚰️ Died - Mort de faim
Défis techniques
- Race conditions entre threads
- Deadlocks avec les fourchettes
- Starvation d'un philosophe
- Performance et optimisation
Compétences développées
- Programmation concurrente
- Synchronisation de threads
- Résolution de problèmes classiques CS
- Debugging multi-threadé
Auteur
Alexandre Pommier (apommier) - École 42