Как начать программировать симуляцию «Обедающие философы»?

StackOverflow https://stackoverflow.com/questions/47707

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Я думаю, что лучший подход для моделирования этого будет Fork класс с таким методом, как use() который держит вилку (bool available = false) и release() это освобождает его.

А Philosopher класс с getFork(Fork) и releaseFork(Fork) который управляет удержанием/отпусканием объекта Fork (мне кажется, что таймер был бы хорош в методе useFork() так что вы действительно можете почувствовать тупик.

И напоследок DinningTable (или любое другое имя), который создает экземпляры и ведет журнал.Если вы планируете использовать потоки, здесь вам следует реализовать поток для каждого из них. Philosopher соглашаясь на Fork.

В качестве предложения вы можете реализовать Plate Класс, держащий в руках такое количество спагетти, которое Philosopher.useFork() метод ниже в течение периода времени.Таким образом, вы можете увидеть, какие Philosopher финиширует первым.

Конечно, я оставлю реализации за вас, поскольку ваша цель — изучить C#...по моему опыту, вам лучше научиться делать что-то конкретное, например, эти классы;) Кроме того, вы можете найти в Google множество реализаций, если хотите схитрить...

Приглашаю вас поделиться кодом после него.Это отличный справочник по обучению.

Надеюсь, это вам поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top