Laut EWD310 "Hierarchical Ordering of Sequential Processes" ( Hierarchische Reihenfolge der sequentiellen Prozesse) wurde Nummer 5 für Bildungszwecke ausgewählt, um es den Schülern zu erleichtern, Algorithmen zu verstehen, mit denen die Lösung des Problems demonstriert werden soll.
Dieser Artikel stützt ferner die Idee, dass 5 für das allgemeine Problem nicht wirklich relevant ist, indem er zum einen explizit angibt, dass das Problem für 9 oder 25 Philosophen gestellt worden sein könnte, und zum anderen, indem er es in Form von zwei gleichzeitig operierenden Problemen darstellt Entitäten, "Klasse A und Klasse B, teilen sich die gleiche Ressource ..."
Die von Dijkstra verwendete Lösung führt drei "Zustände des Philosophen" ein: Denken, Essen, Hunger. Der zur Lösung des Problems vorgestellte Code verwaltet diese drei Zustände zusammen mit einer damit nicht verbundenen Anzahl von Philosophen.
Wenn der Autor die Anzahl der Philosophen 2, 3 oder 4 gewählt hat, kann dies zu Verwirrung bei den Schülern führen, die den Code lesen, unabhängig davon, ob die gewählte Anzahl mit der Anzahl der Zustände oder etwas anderem zusammenhängt. Dies kann leicht durch Versuch genannten Zahlen in der Beschreibung von EWD310 unten angegebenen getestet werden: Anmerkung zum Beispiel , wie sich dies ändern würde [0:4]
auf [0:3]
, [0:2]
, [0:1]
und Aussagen , welche mod
.
Im Gegensatz dazu sieht Nummer 5 ziemlich unschuldig aus und ruft keine unnötigen Assoziationen hervor. Man kann sagen, dass es gewählt wurde, um besser zu veranschaulichen, dass die Anzahl der Philosophen willkürlich ist .
Der erwähnte Algorithmus wird in EWD310 wie folgt dargestellt:
... ordnen wir jedem Philosophen eine Zustandsvariable "C" zu, sagen wir, wo
C[i] = 0
bedeutet: Philosoph i
denkt
C[i] = 2
bedeutet: Philosoph i
isst.
...
Wir führen für den letzten Übergang einen Zwischenzustand ein
C[i] = 1
bedeutet: Philosoph i
ist hungrig
Jetzt durchläuft jeder Philosoph zyklisch die Zustände 0, 1, 2, 0 ... Die nächste zu stellende Frage lautet: Wann muss der (gefährliche) Übergang von 1 zu 2 für den Philosophen stattfinden K
?
...
Im Universum nehmen wir deklariert an
1) die semaphore mutex
, anfangs = 1
2) die integer array C[0:4]
, mit anfangs allen element = 0
3) das semaphore array prisem[0:4]
mit anfangs allen Elementen = 0
4) procedure test (integer value K);
if C[(K-1) mod 5] ≠ 2 and C[K]= 1
and C[(K+1) mod 5] ≠ 2 do
begin C[K]:= 2; V(prisem[K]) end;
(Diese Prozedur, die die Instabilität behebt, falls K
vorhanden, wird nur innerhalb eines kritischen Abschnitts aufgerufen.)
In diesem Universum kann das Leben des Philosophen w
jetzt kodiert werden
cycle begin think;
P (mutex);
C[w]:= 1; test (w);
V(mutex);
P(prisem[w]); eat
P(mutex);
C[w]:= 0; test [(w+l) mod 5];
test [(w-1) mod 5];
V(mutex)
end
Und das schließt die Lösung, die ich anstrebte ...