Как начать кодировать “Обеденных Философов” моделирование?

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

6
задан Jacob Schoen 14 September 2012 в 21:36
поделиться

1 ответ

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

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

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

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

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

Я приглашаю Вас совместно использовать код после него. Это - большая Ссылка Исследования.

Надежда Это помогает Вам.

6
ответ дан 17 December 2019 в 02:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: