mirror of
https://github.com/Ladebeze66/philosophers.git
synced 2025-12-18 06:57:56 +01:00
readme2
This commit is contained in:
parent
bcbf3e8d67
commit
6fae727797
23
README.md
23
README.md
@ -3,6 +3,7 @@
|
|||||||
Le projet Philosopher de l'École 42 est une implémentation du célèbre problème des philosophes mangeurs (ou Dining Philosophers Problem), conçu pour introduire les étudiants aux concepts fondamentaux de la programmation concurrente. Ce problème illustre les défis liés à la synchronisation et à la gestion des ressources partagées entre processus ou threads.
|
Le projet Philosopher de l'École 42 est une implémentation du célèbre problème des philosophes mangeurs (ou Dining Philosophers Problem), conçu pour introduire les étudiants aux concepts fondamentaux de la programmation concurrente. Ce problème illustre les défis liés à la synchronisation et à la gestion des ressources partagées entre processus ou threads.
|
||||||
|
|
||||||
🎯 Objectifs du Projet
|
🎯 Objectifs du Projet
|
||||||
|
|
||||||
Compréhension de la Programmation Concurrente : Apprendre à gérer l'exécution simultanée de plusieurs threads ou processus au sein d'un programme.
|
Compréhension de la Programmation Concurrente : Apprendre à gérer l'exécution simultanée de plusieurs threads ou processus au sein d'un programme.
|
||||||
|
|
||||||
Gestion des Ressources Partagées : Mettre en place des mécanismes pour synchroniser l'accès à des ressources communes, évitant ainsi les conditions de course et les blocages.
|
Gestion des Ressources Partagées : Mettre en place des mécanismes pour synchroniser l'accès à des ressources communes, évitant ainsi les conditions de course et les blocages.
|
||||||
@ -10,52 +11,52 @@ Gestion des Ressources Partagées : Mettre en place des mécanismes pour synchro
|
|||||||
Utilisation des Mutex et Sémaphores : Implémenter des solutions utilisant des mutex et des sémaphores pour contrôler l'accès aux ressources partagées et assurer la synchronisation entre threads ou processus.
|
Utilisation des Mutex et Sémaphores : Implémenter des solutions utilisant des mutex et des sémaphores pour contrôler l'accès aux ressources partagées et assurer la synchronisation entre threads ou processus.
|
||||||
|
|
||||||
🛠️ Spécifications Techniques (Suite)
|
🛠️ Spécifications Techniques (Suite)
|
||||||
|
|
||||||
Contraintes (Suite) :
|
Contraintes (Suite) :
|
||||||
|
|
||||||
Le programme doit éviter les situations de deadlock (blocage mutuel) où aucun philosophe ne peut progresser.
|
Le programme doit éviter les situations de deadlock (blocage mutuel) où aucun philosophe ne peut progresser.
|
||||||
Il doit également prévenir les situations de starvation où un philosophe ne peut jamais accéder aux fourchettes nécessaires pour manger.
|
Il doit également prévenir les situations de starvation où un philosophe ne peut jamais accéder aux fourchettes nécessaires pour manger.
|
||||||
Les actions des philosophes (prendre une fourchette, manger, dormir, penser) doivent être affichées avec un horodatage pour suivre l'évolution de la simulation.
|
Les actions des philosophes (prendre une fourchette, manger, dormir, penser) doivent être affichées avec un horodatage pour suivre l'évolution de la simulation.
|
||||||
|
|
||||||
🔧 Approche d'Implémentation
|
🔧 Approche d'Implémentation
|
||||||
|
|
||||||
1️⃣ Gestion des Threads et Synchronisation
|
1️⃣ Gestion des Threads et Synchronisation
|
||||||
Chaque philosophe est représenté par un thread.
|
Chaque philosophe est représenté par un thread.
|
||||||
Les fourchettes sont partagées et représentées par des mutex (pour la version multi-threads) ou sémaphores (pour la version multi-processus).
|
Les fourchettes sont partagées et représentées par des mutex (pour la version multi-threads) ou sémaphores (pour la version multi-processus).
|
||||||
Chaque philosophe tente d’acquérir les deux fourchettes adjacentes avant de commencer à manger.
|
Chaque philosophe tente d’acquérir les deux fourchettes adjacentes avant de commencer à manger.
|
||||||
|
|
||||||
2️⃣ Éviter les Problèmes de Concurrence
|
2️⃣ Éviter les Problèmes de Concurrence
|
||||||
Pour éviter un deadlock, une approche classique consiste à :
|
Pour éviter un deadlock, une approche classique consiste à :
|
||||||
Faire en sorte que le dernier philosophe prenne d’abord la fourchette droite, puis la gauche (contrairement aux autres).
|
Faire en sorte que le dernier philosophe prenne d’abord la fourchette droite, puis la gauche (contrairement aux autres).
|
||||||
Utiliser un sémaphore global pour limiter le nombre de philosophes mangeant simultanément.
|
Utiliser un sémaphore global pour limiter le nombre de philosophes mangeant simultanément.
|
||||||
Pour éviter la starvation, on s’assure qu’aucun philosophe ne reste bloqué indéfiniment sans accès aux fourchettes.
|
Pour éviter la starvation, on s’assure qu’aucun philosophe ne reste bloqué indéfiniment sans accès aux fourchettes.
|
||||||
|
|
||||||
3️⃣ Gestion des États et Horodatage
|
3️⃣ Gestion des États et Horodatage
|
||||||
Chaque action est enregistrée avec un timestamp.
|
Chaque action est enregistrée avec un timestamp.
|
||||||
Un thread de surveillance peut être utilisé pour vérifier si un philosophe n’a pas mangé depuis trop longtemps et signaler sa mort si nécessaire.
|
Un thread de surveillance peut être utilisé pour vérifier si un philosophe n’a pas mangé depuis trop longtemps et signaler sa mort si nécessaire.
|
||||||
|
|
||||||
📂 Structure du Projet
|
|
||||||
Fichiers Principaux :
|
|
||||||
philo.c : Fichier principal qui initialise les threads et gère la simulation.
|
|
||||||
philo_utils.c : Fonctions utilitaires pour gérer l'affichage, la gestion du temps, etc.
|
|
||||||
philo_threads.c : Gestion des philosophes sous forme de threads (version multi-threads).
|
|
||||||
philo_process.c : Gestion des philosophes sous forme de processus (version multi-processus avec sémaphores).
|
|
||||||
Bibliothèques Utilisées :
|
|
||||||
pthread pour la gestion des threads.
|
|
||||||
semaphore.h pour la gestion des sémaphores (version multi-processus).
|
|
||||||
time.h pour la gestion des horodatages.
|
|
||||||
|
|
||||||
🧪 Tests et Validation
|
🧪 Tests et Validation
|
||||||
|
|
||||||
Tests Fonctionnels :
|
Tests Fonctionnels :
|
||||||
|
|
||||||
Vérifier que les philosophes prennent correctement les fourchettes et alternent entre les états.
|
Vérifier que les philosophes prennent correctement les fourchettes et alternent entre les états.
|
||||||
Observer si la simulation empêche les deadlocks et starvation.
|
Observer si la simulation empêche les deadlocks et starvation.
|
||||||
|
|
||||||
Tests de Performance :
|
Tests de Performance :
|
||||||
|
|
||||||
Exécuter avec un nombre élevé de philosophes pour tester la stabilité et l’efficacité du programme.
|
Exécuter avec un nombre élevé de philosophes pour tester la stabilité et l’efficacité du programme.
|
||||||
Cas Limites :
|
Cas Limites :
|
||||||
|
|
||||||
Philosophe unique (peut-il manger ?).
|
Philosophe unique (peut-il manger ?).
|
||||||
|
|
||||||
Temps à mourir très court.
|
Temps à mourir très court.
|
||||||
|
|
||||||
Vérification des performances avec un grand nombre de philosophes.
|
Vérification des performances avec un grand nombre de philosophes.
|
||||||
|
|
||||||
📚 Ressources Utiles
|
📚 Ressources Utiles
|
||||||
|
|
||||||
[Vidéo Explicative sur le problème des philosophes][https://www.youtube.com/watch?v=NbwbQQB7xNQ]
|
[Vidéo Explicative sur le problème des philosophes][https://www.youtube.com/watch?v=NbwbQQB7xNQ]
|
||||||
|
|
||||||
🚀 Pourquoi ce projet est important ?
|
🚀 Pourquoi ce projet est important ?
|
||||||
|
|
||||||
Le projet Philosopher est une introduction essentielle aux problèmes de concurrence en informatique. Il enseigne la gestion des threads et processus, la synchronisation avec mutex et sémaphores, et l’optimisation des ressources partagées. Ces concepts sont fondamentaux pour le développement système, les bases de données et le multithreading en programmation avancée.
|
Le projet Philosopher est une introduction essentielle aux problèmes de concurrence en informatique. Il enseigne la gestion des threads et processus, la synchronisation avec mutex et sémaphores, et l’optimisation des ressources partagées. Ces concepts sont fondamentaux pour le développement système, les bases de données et le multithreading en programmation avancée.
|
||||||
Loading…
x
Reference in New Issue
Block a user