Ответ 1
Определение. Философ включен, если он не ждет недоступного семафора. Выполнение - это бесконечная последовательность шагов, предпринятых активированными философами. Исполнение строго справедливо, если каждый философ бесконечно часто принимает бесконечно много шагов. Решение столовых философов не содержит голода, если в каждом строго честном исполнении каждый философ умирает бесконечно часто.
Теорема. Каждое безрецептурное решение для столовых философов, в котором не обеденные философы не имеют семафоров, не содержит голода.
Доказательство. Предположим, что для получения противоречия существует строго справедливое исполнение, в котором какой-то философ, называя его Филом, обедает только финитно. Мы показываем, что это выполнение фактически зашло в тупик.
Так как pickup_chopsticks
и drop_chopsticks
не имеют циклов, Фил выполняет только конечное число шагов. Последний шаг - semaphore_wait
, скажем, на палочке i. Поскольку выполнение является справедливым, палочка я обязательно непрерывно недоступна с некоторого конечного времени вперед. Пусть Квентин станет последним обладателем палочки для еды. Если Квентин выполнил бесконечно много шагов, тогда он будет semaphore_signal
chopstick i, поэтому Квентин также выполняет конечные шаги. Квинтин, в свою очередь, ждет палочки j, которая, по тем же аргументам, постоянно недоступна до конца и удерживается (скажем) Робертом. Следуя цепочке semaphore_wait
среди конечного числа философов, мы обязательно приходим к циклу, который является тупиком.
КЭД