Ce projet implémente une solution au problème du dîner des philosophes proposé par Dijkstra, servant à illustrer les phénomènes d'interblocage et de gestion de ressources partagées en programmation concurrente.
- Éviter les blocages (deadlocks) via une stratégie de prévention utilisant des sémaphores
- Implémenter un système client-serveur basé sur des sockets UDP.
- Assurer la communication concurrente entre plusieurs processus.
- Client : représente les philosophes. Chaque philosophe est un processus fils du client principal. Ils communiquent via UDP avec le serveur.
- Serveur : coordonne l'accès aux fourchettes à l’aide de sémaphores (structure IPC). Chaque requête est traitée par un processus fils pour optimiser la réactivité.
- Utilisation de sémaphores POSIX et opérations de type P avec le flag IPC_NOWAIT.
- Si un philosophe ne peut obtenir les deux fourchettes immédiatement, il relâche celle obtenue et réessaye plus tard.
- Une priorité dans l’ordre d’allocation (plus jeune philosophe ou le père) est utilisée pour réduire les risques de famine ou de deadlock.
- Langage : C
- Bibliothèques : sys/socket.h, sys/sem.h, sys/shm.h, errno.h
- Communication : UDP
- Environnement : Systèmes compatibles POSIX (Linux)
- gcc -Wall -Werror -Wextra udpServer.c -o serv
- gcc -Wall -Werror -Wextra udpClient.c -o client