Speisende philosophen - Semaphorenkonzept
-
Hallo,
ich weiss nicht ob ich hier richtig bin, aber wusste net so wohin damit...Es geht um folgende Problematik:
An einem runden Tisch sitzen fünf Philosophen. Vor jedem
Philosophen steht ein Teller mit Nudeln und zwischen je zwei Tellern liegt ein Stäbchen (es handelt sich offensichtlich um chinesische Philosophen). Die Philosophen agieren unabhängig voneinander und von Zeit zu Zeit wird jeder dieser Philosophen von den Nudeln auf seinem Teller essen. Er benötigt dazu die beiden Stäbchen rechts und links von seinem Teller.(Der Parameter i steht dabei immer für die Nummer des Philosophen. Es gibt einen Mutex mutex und für jeden Philosophen i ein Semaphor s[i])
Wozu ist denn das up() in der Methode test gut? Wenn man die Methode test in der Methode put_sticks aufruft ,dann macht das für mich sinn, weil ich ja die Nachbarn wecken will. Aber test wird ja auch auf sich selbst aufgerufen in der Methode take_sticks...warum führe ich ein up() auf mich selbst aus? Auch verstehe ich das down() (Zeile 7) in der Methode take_sticks nicht...
1 void test (int i) 2 { 3 /* wenn i hungrig ist und kein Nachbarn von i isst */ 4 if ( state [i] == HUNGRY && state [ LEFT ] != EATING 5 && state [ RIGHT ] != EATING ) { 6 state [i] = EATING ; /* i zum essen schicken /* 7 up (&s[i]); 8 } 9 } 1 void take_sticks (int i) 2 { 3 down (& mutex ); 4 state [i] = HUNGRY ; /* Hunger melden */ 5 test (i); /* testen ob essensbereit 6 up (& mutex ); 7 down (&s[i]); /* auf Freigabe des Essens warten */ 8 } 1 void put_sticks (int i) 2 { 3 down (& mutex ); 4 state [i] = THINKING ; /* Essen beenden */ 5 test ( LEFT ); /* Nachbarn ggf. aufwecken */ 6 test ( RIGHT ); 7 up (& mutex ); 8 }