2011-10-18 11:14:08 +02:00

39 lines
890 B
Plaintext

FORKS: SEMAPHORE[] = {1,1,1,1,1} // Verfügbare Gabeln
PSTATUS: INTEGER[] = {0,0,0,0,0} // 0 = Denken, 1 = Hungrig, 2=Essend
philosoph i=[0,3] : PROCESS; // Philosoph 0-3
BEGIN
IF PSTATUS[i] == 1 //Hat Hunger - Philosoph muss sich selber auf hungrig setzen
BEGIN
P(FORKS[(i+4) mod 5])
P(FORKS[i])
PSTATUS[i] = 2; //Isst
WHILE(PSTATUS[i] == 2) //Philosoph muss sich selber auf denkend setzen
BEGIN
END
V(FORKS[(i+4) mod 5])
V(FORKS[i])
END
END
philosoph i=4 : PROCESS; // Philosoph 4
BEGIN
IF PSTATUS[i] == 1 //Hat Hunger - Philosoph muss sich selber auf hungrig setzen
BEGIN
P(FORKS[i]) //Reservierung erfolgt in umgekehrter Reihenfolge!
P(FORKS[(i+4) mod 5])
PSTATUS[i] = 2; //Isst
WHILE(PSTATUS[i] == 2) //Philosoph muss sich selber auf denkend setzen
BEGIN
END
V(FORKS[i])
V(FORKS[(i+4) mod 5])
END
END