|
|
|
| Prozeß in Queue [Zug auf Strecke] |
|
|
| (
|
|
| [Strecke ist frei, Einfahren und Signal auf ''Rot'' setzen] | |||
|
| queue ist leer |
| (
|
| queue nichtleer |
| Aktiviere einen (wartenden) Prozeß | |
| [Wartenden Zug einfahren lassen, Signal bleibt ''Rot''] |
procedure test (integer value k);
if C[(k-1) mod 5] <> 2 and C[k] == 1
and C[(k+1) mod 5] <> 2
begin C[k] := 2, V(prisem[k]) end
end
Bemerkung :
1: cycle begin think
2: P(mutex)
3: C[w] := 1; test(w)
4: V(mutex)
5: P(prisem[w]); eat
6: P(mutex)
7: C[w] := 0; test[(w+1) mod 5];
test[(w-1) mod 5]
8: V(mutex)
9: end
Erläuterung: