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