Эта загадка относится скорее к программированию, а не к философии.
В 1965 году Эдсгером Дейкстрой (разработчик концепции структурного программирования) не захотел принимать стандартный экзамен у своих студентов. Вместо этого он предложил им задачу доступа к ленточному накопителю. Чуть позже Ричард Хоар переформулировал задачу: теперь это задача размышлений и доступа к бесконечной лапше.
Формулировка задачи
Пять философов сидят вокруг круглого стола. Перед каждым стоит тарелка с бесконечной лапшой. Ещё на столе лежат пять вилок, каждая ровно посередине между двумя ближайшими тарелками. Чтобы есть лапшу, каждому философу нужно держать в руках две вилки.
Философ может либо есть, либо размышлять. За одно действие философ может взять одну вилку со стола в руку или положить её из руки на стол.
Какой алгоритм должен быть, чтобы никто из философов не голодал?
Неверное решение
Казалось бы, что может быть проще? Сначала размышляешь, потом ешь, потом снова размышляешь. Вот пример конкретного алгоритма, который первый приходит в голову большинству решающих:
1. Размышлять, пока не освободится левая вилка.
2. Когда вилка освободится — взять её.
3. Размышлять, пока не освободится правая вилка.
4. Когда вилка освободится — взять её.
5. Есть.
6. Положить левую вилку.
7. Положить правую вилку.
8. Повторить алгоритм сначала.
Такое решение задачи некорректно: если все философы одновременно воспользуются алгоритмом, то они все возьмут левую вилку одновременно и будут размышлять с левой вилкой в руке, пока не освободится правая вилка.
Но правая вилка не может освободиться: она в руках у философа, который держит её как левую.
Получается, что все философы будут вечно размышлять с левой вилкой в руке.
Такое поведение называется состоянием взаимной блокировки.
Можно видоизменить алгоритм. Пусть философ, оказавшийся заблокированным, через пять минут положит вилку. А потом, ещё через пять минут, снова попытается выполнить приведённый выше алгоритм.
Но из-за того, что они будут делать всё синхронно, они снова не смогут приступить к еде: они вечно будут поднимать и опускать левую вилку, пока не умрут от голода. Это - проблема ресурсного голодания, возникающая из-за отсутствия синхронизации.
Что же делать?
Продолжение читать здесь.