Згідно з написаним в EWD310 "Ієрархічне впорядкування послідовних процесів" , схоже, що число 5 було обрано для навчальних цілей, щоб студентам було легше зрозуміти алгоритм, розроблений для демонстрації вирішення проблеми.
Цей самий документ також підтримує думку про те, що 5 насправді не має відношення до загальної проблеми, спочатку чітко заявляючи, що "проблема могла бути поставлена для 9 або 25 філософів ..." і далі, представляючи її в термінах двох одночасно діючих сутностей, "клас A і клас B, що мають однаковий ресурс ..."
Рішення, яке використовує Дайкстра, вводить три "стани філософа": думати, їсти, голодувати. Кодекс, представлений для вирішення проблеми, оперує цими трьома державами, поряд з не пов'язаною з ним кількістю філософів.
Якби автор обрав кількість філософів 2, 3 або 4, це може спричинити плутанину у студентів, які читають код, чи пов’язане вибране число з кількістю штатів чи чимось іншим. Це можна легко перевірити, спробувавши зазначені цифри в описі процитованих з EWD310 нижче ноти, наприклад , як це змінило б [0:4]
до [0:3]
, [0:2]
, [0:1]
і заяву з участю mod
.
На відміну від цього, число 5 виглядає досить невинне і не викликає зайвих асоціацій. Можна сказати, що вона була обрана для кращого ілюстрації, що кількість філософів є, безумовно, довільною .
Згаданий алгоритм представлений у EWD310 наступним чином:
... ми пов'язуємо з кожним філософом змінну стану, "С" кажіть, де
C[i] = 0
означає: філософ i
мислить
C[i] = 2
означає: філософ i
їсть.
...
введемо для останнього переходу проміжний стан
C[i] = 1
означає: філософ i
голодний
Тепер кожен філософ буде циклічно проходити через стани 0, 1, 2, 0 ...... Наступне питання, яке слід задати: коли відбудеться (небезпечний) перехід від 1 до 2 для філософа K
?
...
У Всесвіті ми вважаємо, що заявлено
1) то semaphore mutex
, початково = 1
2) the integer array C[0:4]
, з початково всім елементом = 0
3) semaphore array prisem[0:4]
з початково всіма елементами = 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;
(Ця процедура, яка вирішує нестабільність, K
коли вона присутня, буде викликана лише з критичного розділу).
У цьому Всесвіті w
тепер можна зафіксувати життя філософа
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
І цим завершується рішення, на яке я мав на меті ...