Problem pięciu filozofów



Zadanie 1. Napisz rozwiązanie problemu pięciu filozofów z możliwością blokady. Zaimplementuj pięć widelców przy pomocy pięcioelementowej tablicy muteksów (funkcje pthread_mutex_lock i pthread_mutex_unlock).  W rozwiązaniu tym filozof o numerze i=0...4 podnosie  najpierw widelec lewy (o numerze  i)  a  następnie widelec prawy (o numerze (i+1)%5). Zademonstruj prowadzącemu wystąpienie zjawiska blokady.

Zadanie 2. Zmodyfiukuj rozwiązanie zadania 1 przez wprowadzenie asymetrii. Niech jeden z filozofów (np. o numerze zero) próbuje podnieść najpierw prawy, a następnie lewy widelec. Czy przy takim rozwiązaniu może wystąpić blokada? Czy może wystąpić zagłodzenie ?

Zadanie 3. (za tydzień) Zaimplementuj problem pięciu filozofów przy pomocy semaforów zliczających  (patrz plik sem.tgz). W tym celu  wykorzystaj semafor zliczający do ograniczenia liczby  filozofów jednocześnie rywalizujących o pałeczki do 4. Czy przy takim rozwiązaniu może wystąpić blokada? Czy może wystąpić zagłodzenie ?
 
Opracował: Wojciech Kwedlo