39 lines
890 B
Plaintext
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 |