Esempio di esecuzione dell'algoritmo per risolvere
il problema dei 5 filosofi (vedi codice nei lucidi)
La tabella illustra lo stato interno dei 5 filosofi durante una
possibile esecuzione durante la quale
prima il filosofo 0 e 2 mangiano insieme mentre 4 e' bloccato (4 e 0
hanno una forchetta in comune),
poi 0 finisce e lascia mangiare 4 (esegue una "up" sul semaforo s[4])
mentre 2 continua a mangiare.
L'evoluzione temporale e' rappresentata tramite lettura della tabella
dall'alto in basso
(le caselle vuote indicano che il filosofo non ha fatto nulla fino al
prossimo evento)
|
Filos. 0 |
Filos. 1 |
Filos. 2 |
Filos. 3 |
Filos. 4 |
Stato |
Think |
Think |
Think |
Think |
Think |
Semaphor S |
0 |
0 |
0 |
0 |
0 |
Istruzione |
take_fork(0) |
take_fork(1) |
take_fork(2) |
take_fork(3) |
take_fork(4) |
|
Hungry |
|
|
|
|
0 |
test(0)
(mutex=0) |
Eating |
1 |
down(S[0])
(mutex=0) |
|
Eating |
1 |
down(S[2]) (mutex=0) |
|
Hungry |
0 |
test(4)
(mutex=1) |
Hungry |
0 |
down(s[4]) --> blocked |
Eating |
Eating |
|
0 |
0 |
eat() |
eat()
|
Thinking |
|
0 |
put_fork(4)
-> test(4)--> up(s[4]) |
|
Eating |
0 |
eat() |