|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
Обедающие философы20.04.2014, 15:10. Показов 9343. Ответов 22
Метки нет (Все метки)
Добрый вечер! Возник такой вот вопрос:
Есть стандартная задача с обедающими философами, описанная в книге Таненбаума. Но преподователь спрашивает, почему нельзя сделать всё циклом, он сказал что может сделать обыкновенным циклом и тоже все философы поедят. Что именно решает эта задача? И почему подход с циклом не верен? Заранее спасибо.
0
|
|
| 20.04.2014, 15:10 | |
|
Ответы с готовыми решениями:
22
Обедающие философы Процессы, Обедающие философы Обедающие философы |
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
| 20.04.2014, 17:07 | |
|
Эта задача актуальна для многопоточной среды
0
|
|
|
|
|
| 20.04.2014, 17:12 | |
|
0
|
|
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 17:22 [ТС] | |
|
Voivoid, подробнее можно?
просто он настаивает на том, что он циклом сможет решить эту задачу и никакой синхронизации не надо. Говорит: "докажи обратное". Зачем то ещё пример работы планировщика задач приводил в NT системе. Дословно не помню, но смысл заключался в том, что процессы работают с всокими приоритетами и работают и не дают возможности запустится процессу с низким приоритетом, а потомм планировщик берёт и повышает приоритет процесса, который ожидал и он выполняется.(что-то типо того). Это он дал в пример, когда сказал "давай, вот запустим на многопроцессорной системе". В итоге: надо ему объяснить, что именно решает данная задача, если накормить философов, то их накормить можно и циклом. Добавлено через 2 минуты IrineK, я с книги брал условие, там аналогичное
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|||
| 20.04.2014, 18:04 | |||
|
0
|
|||
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 18:17 [ТС] | |
|
DrOffset, а если цклом, то его получится распараллелить? или же он будет выполнятся строго одним потоком (процессом)
0
|
|
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 18:39 [ТС] | |
|
я кажется понял, здесь подразумевается то, что каждый философ это отдельный процесс.
Цикл в данном случае не подходит по тому, что мы не знаем какой из процессов обратится первым к разделяемому ресурсу, так как время раздумия надо рассматривать динамиччески(что в цикле не возможно, там мы зададим строго определенный интервал, а в реальности процесс может запросить ресурс в любое время т.е. цикл будет не оптимален). Забыл где, но где - то читал пример про принтеры на семафорах, там похожая ситуация. Но всё равно он завтра с циклом прикопается скорее всего, ладно, всем спасибо, как узнаю правильный ответ напишу, может кому пригодится.
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
| 20.04.2014, 18:44 | |
|
Очевидно, что в общем случае цикл можно крутить только в одном потоке
0
|
|
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 18:47 [ТС] | |
|
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|
| 20.04.2014, 18:51 | |
|
танкист34, для начала неплохо бы выяснить что конкретно предлагается решать циклом и как это будет выглядеть.
Нужно исходить из того, что каждый философ обозначает параллельную задачу. Добавлено через 1 минуту танкист34, вот здесь есть несколько решений на разных языках. В том числе на С и С++.
0
|
|
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 18:59 [ТС] | |
|
DrOffset, спасибо, у меня решение имеется.
Да я то понимаю, что каждый философ (это как разная задача == процесс), НО это надо ещё преподователю доказать, что он не сможет это циклом решить. Особенно против довода, что если выполнять эту задачу на многопроцессорной системе с помощью семафоров, то один из философов может не поесть, а циклом все покушают. Хотя странно, что он не поест никогда, ведь он в очередь встанет.
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
|
| 20.04.2014, 19:01 | |
|
Если под циклом подразумевается последовательная кормежка философов (т.е. по очереди), то да, можно так решать. Но это будет решение совсем другой задачи
Ведь эта задача ставилась в контексте того, что каждый философ - это отдельный, параллельный поток.Преподаватель похоже тебя провоцирует просто.
0
|
|
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 19:07 [ТС] | |
|
DrOffset, а тогда получается, если мы как вы говорите организуем последовательную кормёжку, то в каждый момент будет кушать только один философ, или же можно по двое?
если по двое можно, то параллельность будет(блин я уже как препод стал рассуждать ), что скорее всего он мне так и скажет, если я ему про параллельность скажу.
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 20.04.2014, 19:11 | ||
|
Именно проблему этой конкуренции и призвана решать данная задача.
1
|
||
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 19:16 [ТС] | |
|
DrOffset, дак при трёх философах так и так кушать сможет только один, циклом делаешь кормёжку по очереди и всё. Я про двух имел ввиду, если всего пять вилок.
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 20.04.2014, 19:24 | ||
Это опять решение не той задачи, которая была поставлена. По условию философ начинает есть, когда закончил думать. Т.е. он пытается инициировать этот процесс, и ожидает только если нет доступных вилок.
1
|
||
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 20.04.2014, 19:34 [ТС] | |
|
DrOffset, спасибо большое, приведу ему все доводы, может докажу.
Добавлено через 2 минуты DrOffset, кстати, на счёт прерывания философа посреди размышлений, то он сказал, что по теории вероятности для больших чисел выходит 50 на 50, следовательно, он расчитает время и получится циклом оптимальнее (я говорю, у него на всё отговорка).
0
|
|
|
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
|
||
| 20.04.2014, 19:44 | ||
Сообщение было отмечено танкист34 как решение
РешениеДавай представим, что еда - это некий набор данных, поев, философ начинает их обрабатывать (т.е. думать). От этих данных зависит длительность вычислений, но неизвестно как именно. Предложи ему решить эту задачу в общем случае. Эта задача как раз хорошо иллюстрирует проблему перекладывания ответственности. Философ ведь точно знает когда он закончит вычисления. А циклу со стороны, чтобы скомпоновать примерно одинаково по времени вычисляющих философов, чтобы запустить их думать вместе, придется применить нехилый мат. аппарат. Если и будет найдено решение, то оно будет неточным (т.е. всегда останется вероятность ошибки). Так в чем же профит?
0
|
||
|
-23 / 0 / 2
Регистрация: 15.03.2013
Сообщений: 328
|
|
| 28.04.2014, 13:16 [ТС] | |
|
DrOffset, не получилось доказать про философов. Он говорит пока формулировку правильную не предоставлю, он в любом случае циклом сможет решить. Формулировки конкретной нет в книге Таненбаума. В той формулировке, которая там дана он сказал задача в любом случае решается конвеером. А в других источниках информация аналогична.
0
|
|
| 28.04.2014, 13:16 | |
|
Помогаю со студенческими работами здесь
20
Обедающие философы, перевод с Delphi Обедающие философы. Решение методом монитора
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|