На самом деле, в этой конкретной программе starvation удаётся избежать за счёт того, что философ "думает" после того, как положил вилки на стол. Что, конечно, не является строгим решением. Строгое решение предписывает не просто будить своих соседей, а проверять, что каждый из соседей 1) голоден (т.е. не находится в состоянии thinking или eating), и 2) обе вилки голодного соседа свободны. Причём философ не просто будит соседа, отвечающего этим условиям, а ещё и сам выставляет его состояние в "eating". То есть, в этом случае, вместо посылания сообщения WakeUp (которое неизвестно ещё когда придёт), мне нужно было бы просто менять переменную внутри объекта Philosopher, а я хотел этого избежать. Моё решение можно считать lightweight и не строгим. Хотя статистическая проверка показывает, что все философы едят примерно одинаковое количество раз.
Re: Про философов
Строгое решение предписывает не просто будить своих соседей, а проверять, что каждый из соседей 1) голоден (т.е. не находится в состоянии thinking или eating), и 2) обе вилки голодного соседа свободны. Причём философ не просто будит соседа, отвечающего этим условиям, а ещё и сам выставляет его состояние в "eating". То есть, в этом случае, вместо посылания сообщения WakeUp (которое неизвестно ещё когда придёт), мне нужно было бы просто менять переменную внутри объекта Philosopher, а я хотел этого избежать.
Моё решение можно считать lightweight и не строгим. Хотя статистическая проверка показывает, что все философы едят примерно одинаковое количество раз.