Я не новичок в C#, но мне действительно нужно углубить свое понимание, поэтому я выбрал классическую проблему тупика для кода, чтобы научиться некоторым более продвинутым концепциям C#. Проблема обедающих философов кажется хорошим, но мне нужна небольшая помощь, чтобы начать. Я знаю, что мне нужно подходить к «посетителям» как к объектам, но для имитации случайных задержек между приемами пищи, следует ли мне обращаться к каждому посетителю в отдельном потоке? Нужен ли мне какой-то «хозяин», чтобы контролировать все действия? Любые общие советы по концепции дизайна приветствуются, но я хотел бы выполнить базовое программирование в качестве упражнения. Спасибо!
Джейкоб, ты когда-нибудь решал задачу «Обеденные философы»? Я думаю решить эту проблему, используя 2 мьютексные переменные, поскольку одновременно могут есть только 2 философа.





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