Philosophers/README.md

56 lines
1.7 KiB
Markdown

# 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
```bash
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
```bash
./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