Начало здесь Итак, у нас есть пять философов, пять вилок и бесконечная лапша. Философ может есть только двумя вилками. За раз он может взять или положить только одну вилку. Как сделать такой алгоритм поведения философов, чтобы ни один из философов не оставался вечно голодным? В прошлый раз мы обсуждали, почему это задача не так тривиальна, как может показаться. Сейчас мы рассмотрим три разных способа решения задачи. 1. Официант Есть некий внешний человек, который и говорит, можно ли взять вилку или нет. Если, допустим, четыре философа держат по одной вилке, то пятому официант запретит брать вилку, чтобы не заблокировать остальных. 2. Иерархия вилок Нумеруем вилки от 1 до 5. Каждый раз философ берёт вилку с меньшим номером, а потом с большим, а кладёт — наоборот. Если вилки с наименьшим номером нет, то философ ничего не берёт. Тогда следующим шагом эту вилку возьмёт тот философ, который уже взял одну вилку. 3. Монитор Философы, прежде чем начать брать вилки, проверяют, что их соседи н