wtorek, 13 grudnia 2011

Problem pięciu filozofów

Problem ucztujących filozofów jest jednym z klasycznych zagadnień programowania współbieżnego dotyczącego zagadnienia synchronizacji procesów. Został on wymyślony przez E. Dijkstra w 1965 roku. Wymyślił on zadanie dotyczące sytuacji, w której 5 komputerów chce uzyskać dostęp do 5 współdzielonych dysków. Niedługo potem, problem został przedstawiony na nowo przez T. Hoare jako problem ucztujących filozofów.

Pięciu filozofów jest przy stole i wykonują jedną z dwóch czynności – albo jedzą, albo rozmyślają. Stół jest okrągły, przed każdym z filozofów jest się miska ze spaghetti (albo ryżem, albo czymkolwiek), a pomiędzy każdą sąsiadującą parą filozofów leży widelec (ewentualnie pałeczka do ryżu, w zależności od wersji). Także każdy ma przy sobie dwie sztuki - po swojej lewej i prawej stronie. Ponieważ jedzenie potrawy jest trudne przy użyciu jednego widelca, zakłada się, że każdy filozof korzysta z dwóch. 



Zrealizowana aplikacja składa się tak naprawdę z dwóch programów napisanych w języku C. Jeden główny, który inicjuje semafory w pamięci dzielonej oraz uruchamia osobne procesy dla każdego z filozofów. Procesy komunikują się ze sobą za pomocą semaforów w pamięci współdzielonej z wykorzystaniem bibliotek sys/sem.h oraz sys/shm.h