Проект -- учебная задача для знакомства с работой корутин на Котлине.
Исходную формулировку задачи об обедающих философах и подходы к решению см. здесь.
Прежде чем приступить к решению основной задачи, предлагается ознакомиться с исходным кодом,
разобраться в применении корутин в нём, оценить разницу между ConcurrentFork
и AtomicFork
и понять логику работы SampleKilosopher
(этот класс реализует наивный алгоритм работы философа).
Формулировка основной задачи (пункт 1 следует воспринимать как "базовую" её часть, а пункты 2 и 3 -- как "продвинутую"):
- Предложить свою реализацию философа (класс должен реализовывать
AbstractKilosopher
), позволяющую избежать дедлоков и прочих проблем с синхронизацией (можно использовать один из рассмотренных в статье Википедии подходов к решению). В этом пункте не разрешается менять базовые классы проекта, за исключением случая обнаружения в них багов. - Реализовать расширенную задачу об обедающих философах. Пусть в середине стола лежит стопка салфеток, и философу, чтобы он мог есть, помимо двух вилок, требуется ещё и салфетка. Поэтому он перед началом еды берёт салфетку из стопки, а по окончании еды возвращает её в стопку. Количество салфеток в стопке -- настраиваемый параметр, его значение должно быть меньше половины числа философов за столом.
- Доработать свою реализацию философа и убедиться, что она функционирует верно и для расширенной задачи.
Решения всех частей задания можно присылать в виде:
- Pull Request-ов к проекту (имейте в виду, что в этом случае решение видно остальным участникам проекта)
- в виде файла / архива по электронной почте [email protected] (в этом случае решение видно только владельцу репозитория)
При обнаружении багов (а такое может случиться), о них можно сообщать в https://github.com/mglukhikh/kilosophers/issues и/или предлагать исправления в виде Pull Request-ов к проекту.