Я думаю, что лучшим подходом для симуляции будет класс Fork
с методом, подобным use()
, который содержит форк (bool available = false
) и release()
, который его выпускает.
Класс Philosopher
с getFork(Fork)
и releaseFork(Fork)
, который управляет удержанием / освобождением объекта Fork (мне кажется, таймер был бы хорош в методе useFork()
, так что вы действительно можете обнаружить тупик.
И, наконец, класс DinningTable
(или любое другое имя), который создает экземпляры и ведет журнал. Если вы планируете использовать потоки, здесь вы должны реализовать поток для каждого Philosopher
, совпадающего для Fork
.
В качестве рекомендации вы можете реализовать класс Plate
, содержащий количество спагетти, которое метод Philosopher.useFork()
понижает в течение периода времени. Таким образом, вы можете увидеть, какой Philosopher
финиширует первым.
Я, конечно, дам вам реализации, так как ваша цель - изучить C # ... по моему опыту, вам лучше научиться делать что-то конкретное, как эти классы;) Кроме того, вы можете найти много реализаций в Google, если Вы хотите обмануть ...
Я приглашаю вас поделиться кодом после него. Это отличный учебник.
Надеюсь, это поможет вам.