Задача об обедающих философах:
Рассмотрим семь программистов, сидящих вокруг круглого стола для обеда. У каждого программиста есть тарелка супа перед ним, а между каждой парой программистов находится ложка. Однако, чтобы поесть суп, программисту необходимо взять две ложки - справа и слева (он очень голодный). Когда программист поедает суп, ложки остаются занятыми и не могут быть использованы соседними программистами. Программисты чередуют прием еды с обсуждением преподавателей. Когда суп заканчивается, программист просит одного из двух официантов принести ему еще одну порцию (то есть тарелка супа ограничена). Всего в ресторане есть 1_000_000 порций еды, после чего обед заканчивается. Все программисты должны поесть +- одинаково, чтобы никому не было обидно
Ваша задача - реализовать симуляцию обеда с использованием языка программирования Java и многопоточности. Каждый программист должен быть представлен в виде потока, а ложки - в виде общих ресурсов, которые программисты могут захватывать и освобождать. Также не забудьте про официантов и запасы еды.
Дополнительное условие -- количество программистов, еды и официантов должно быть параметризируемое.
Это усложнение классической задачи, про которую можно почитать тут
Необходимо обеспечить корректное выполнение программы, чтобы избежать состояний взаимной блокировки и гарантировать, что каждый программист получит возможность поесть.
- Использование системы сборки Gradle
- Код должен быть отлажен и протестирован