Пять безмолвных философов сидят вокруг круглого стола, перед каждым философом стоит тарелка спагетти. Вилки лежат на столе между каждой парой ближайших философов.
Каждый философ может либо есть, либо размышлять. Философ может есть только тогда, когда держит одновременно две вилки — взятую справа и слева
Каждый философ может взять ближайшую вилку (если она доступна) или положить — если он уже держит её. Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим.
Задача: разработать программу, реализующую алгоритм, при котором не один философ не будет голодать.
Реализовать графическую или текстовую иллюстрацию состояния.
Требования:
Необходимо обеспечить:
Защиту от взаимоблокировок (deadlocks)
Защиту от динамических взаимоблокировок (livelock)
Справедливость – все философы едят примерно одинаковое количество времени
Заготовка на C++ в приложении.
Описать, какой алгоритм вы использовали для избежания блокировок, и почему он работает.