Чому п'ять філософів-обідників?


18

Мені було цікаво, чому проблема філософів "Їдальня" базується на справі п'яти філософів. Чому б не чотири?

Я здогадуюсь, що ми можемо спостерігати всі неприємні питання, які можуть виникнути при обговоренні прикладу п’яти філософів, також, коли нам дають чотири мислителя. Чи то лише з історичної причини?


1
Первісну проблему описав Дійкстра в 1965 році і назвав Їдальнями квінтюле (знайдено в примітках вгорі сторінки 3).

Я, здається, пам’ятаю, що навчався чотирьох філософів-ресторанів ...
Майкл Боргвардт,

16
Це 5 філософів, тому що він намагався зрозуміти, чи хтось колись помітить очевидне; 5 філософів разом поговорять, поки ресторан не виганяє їх, вони ніколи навіть не візьмуть срібла. 4, можливо, перерва в розмові достатньо довго, щоб вони почали їсти. Із 5, як тільки будь-яка дві зупиняються на мить, на черзі вже є одна в черзі, яка чекає, щоб перейти, щоб забезпечити наступність.
Джиммі Хоффа

1
@Jimmy Hoffa - + 1. І чому це не відповідає?
SChepurin

Відповіді:


17

Згідно з написаним в 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

І цим завершується рішення, на яке я мав на меті ...


2
Я, можливо, тоді не був би філософом, бо можу одночасно думати, коли їсти чи голодувати. І ще: ніхто з них не п’є і навіть не розмовляє.
ott--

5

Тільки Dijkstra може відповісти точно, але я був би досить впевнений, що це довільно.

"Спочатку вона була сформульована в 1965 році Едджером Дайкстра в якості студентського іспиту, представленого в рамках комп'ютерів, що конкурують за доступ до периферійних пристроїв стрічкових накопичувачів. Незабаром Тоні Хоар дав проблемі свою теперішню формулювання".

http://en.wikipedia.org/wiki/Dining_philosophers_problem


2
Розглянемо проблему чотирьох закусок порівняно з п’ятьма. Як змінюється проблема? Це легше чи важче? Це було екзаменаційне питання - найважче, швидше за все, те, що хочеться задати.

2

Тому що це дивно, навіть. Так що ви не намагаєтесь розробити алгоритм, який спирається на симетрію або утворюють пари, і лише набагато пізніше зрозумієте, що це не працює для загального випадку.

Це думка; Я не маю історичних знань про те, що перейшло в голову автора.


Цей момент є вирішальним. З чотирма філософами, дві пари з них могли по черзі їсти.
Аарон Брік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.