LINUX.ORG.RU
ФорумTalks

Обедающие философы

 


0

1

Это, как пишет вика, классический пример, используемый в информатике для иллюстрации проблем синхронизации при разработке параллельных алгоритмов и техник решения этих проблем.

Оттуда же следует, что

Проблема была сформулирована в 1965 году Эдсгером Дейкстрой как экзаменационное упражнение для студентов. В качестве примера был взят конкурирующий доступ к ленточному накопителю. Вскоре проблема была сформулирована Ричардом Хоаром в том виде, в каком она известна сегодня

Вот сама формулировка:

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

Я кагбэ, для себя, переформулировал проблему следующим образом:

Есть 2 курильщика, курительные принадлежности, куда входят спички и сигареты. Один взял спички, другой сигареты, и оба зависли в ожидании освобождения 2-й принадлежности.

В связи с этим вопрос: может я че-то не так понял? А если все правильно, то как мы должны называть людей, которые, городят огород, там где все просто как 2х2? О покойниках плохо нельзя, поэтому воздержусь от оскорблений в адрес конкретных «ученых», лучше обобщу: нахрена это делается вообще? Чтоб набить цену? Из-за беспробудной тупости?

И попутно еще вопрос. В русской вики говорится о параллельности, а в английской: «used in concurrent algorithm». Правомерно ли приравнивать конкурентность к параллельности? Вроде, это все-таки, разные вещи, типа, конкурентность же - это иллюзия параллельности, ее имитация.



Последнее исправление: anonimous (всего исправлений: 1)

на удивление складно, я только на слове «курильщик» посмотрел на ник автора

Deleted
()

конкурентность же - это иллюзия параллельности, ее имитация

ну да, английский - иллюзия языка, его имитация.

x0r ★★★★★
()

Пока читал сообщение, понял что голоден и хочу кушать.

Mosi
()
Ответ на: комментарий от anonimous

к тому, что concurrency не должно восприниматься, как последовательное выполнение нескольких потоков.

x0r ★★★★★
()
Ответ на: комментарий от x0r

не должно восприниматься, как последовательное выполнение нескольких потоков.

Как же мы тогда должны различать «истиную» параллельность, выполняющуюся на 2-х процах и конкурентность?

anonimous
() автор топика
Ответ на: комментарий от anonimous

она и на 2х процессорах будет конкурентностью, пока есть ресурс, вокруг которого нужна синхронизация (как в твоей задаче, не?) обычно об «истинности» параллельности не говорят.

x0r ★★★★★
()
Ответ на: комментарий от anonimous

а мне с sourceforge раз в неделю приходит спам про parallel algorithms, но это не значит, что проталкивается тема lock-free алгоритмов на real-time системах с 1 потоком на 1 камень без диспетчеризации. нa CPU вообще все concurrent хотябы потому, что есть планировщик. об истинности можно говорить например в рамках GPU, фрагментные шейдеры исполняются ъ-параллельно.

x0r ★★★★★
()
Последнее исправление: x0r (всего исправлений: 1)
Ответ на: комментарий от x0r

Да, но в одном случае, каждый из процессов претендующих на ресурс будет выполняться независимо от другого, а так, они выполняются по очереди, можно сказать, конкурируют не только за ресурс, но и за время выполнения. Здесь сложность распределения увеличивается, не?

anonimous
() автор топика
Ответ на: комментарий от anonimous

каждый из процессов претендующих на ресурс будет выполняться независимо от другого

а что в этом хорошего то? два повара готовят суп и борщ в одной кострюле. сложность распределения в данном случае чего? ресурса? следует или выдумать lock-free алгоритм, или положить болт на блокировки.

x0r ★★★★★
()
Последнее исправление: x0r (всего исправлений: 1)
Ответ на: комментарий от x0r

Не, это, кажется проще, чем когда один повар имитирует 2-х поваров, которые имеют доступ к одному борщу, хотя, хз. Я имею в виду не с точки зрения прграммиста-пользователя, для которого уже создана иллюзия параллельности, а с точки зрения общей вычислительной архитектуры, или, хз, как правильно выразится.

anonimous
() автор топика
Ответ на: комментарий от anonimous

что есть вычислительная архитектура? ты сводишь к параллеьности исполнения инструкций на cpu?

x0r ★★★★★
()
Ответ на: комментарий от x0r

Я имею в виду, что средства операционной системы, допустим, должны диспетчеризовать процессы во времени, помимо того, что процессы должны получать доступ к общим ресурсам без взаимных блокировок. Мне кажется, что такая система в целом, сложней, чем если каждый процесс выполнялся бы независимо. Получается, что необходимо разруливать не только доступ к ресурсу, но и доступ к процессорному времени. Хотя я не силен в этом, может ошибаюсь, так просто, подумалось, что настоящая параллельность должна быть проще в целом, по идее.

anonimous
() автор топика
Ответ на: комментарий от buddhist

Неверная переформулировка: там это делается, чтоб интересней было, а тут - эффект совершенно другой - чтоб запутать и чтоб никто них*я не понял.

anonimous
() автор топика
Ответ на: комментарий от x0r

ну да, английский - иллюзия языка, его имитация.

наконец-то ты понял

DNA_Seq ★★☆☆☆
()

сигарету можно от сигареты подкуривать, главное первую спичку зажечь

kott ★★★★★
()
Ответ на: комментарий от leg0las

Стоит уже запомнить, что в приличном обществе (коим лор, правда, не является) cs по дефолту обозначает computer science, а не эту вашу школопострелушку.

mix_mix ★★★★★
()
Ответ на: комментарий от mix_mix

Да ладно, еще скажи что взрослые дяди-админы не могут себе позволить иногда пошпилить в какую-нибудь стрелялку.

Свежий опрос это кстати подтверждает: В какие игры вы играете на компьютере?

Ну либо потверждает, что ЛОР зохвачен школотой.

leg0las ★★★★★
()
Последнее исправление: leg0las (всего исправлений: 1)
Ответ на: комментарий от anonimous

Все верно. Только у них есть два термина, а у нас один. Concurrent означает, что процесс выполняется вместе с остальными процессами, разделяя процесорное время. А parallel означает, что процесс выполняется одновременно с другими процесами.

При этом в ряде операций, особенно в работе с сетью и хранилищами, время ожидания на получение данных ОС как раз выделит под выполнение соседнего процеса. Таким образом, в те далекие времена concurrent был равносилен параллельности (да и сейчас тоже).

Что касается истинной параллельности, то тогда и сейчас это направление остается чрезвычайно сложным. Поскольку нет ни одного ЯП, который мог бы компилировать/интерпретировать даже обычный цикл на множестве независимых системах без извращений. И Дейкстра не стал бы давать подобные задачи студентам. OpenMP, MPI, Фортран это все извращения по сути. Но что имеем, то имеем. Всяко лучше чем ничего.

gh0stwizard ★★★★★
()

сначала прочитал «объедающиеся философы», потом прочитал кто аффтар и фсё стало ясно.

thunar ★★★★★
()

Concurrency — это такой паттерн проектирования, когда программа состоит из нескольких разнородных частей, выполняющихся одновременно и как-нибудь друг с другом взаимодействующих (это абстракция, не важно как оно реализовано на самом деле, csp, тредами или ещё как). Например лексер, парсер и т.д. у компилятора.

Parallelism — это когда алгоритм состоит из однотипных операций, которые можно переложить на нескольких исполнителей (всякие арифметические операции с матрицами и подобное).

Parallelism полезно иметь при concurrency, но не обязательно, concurrency — способ организации программы, parallelism — оптимизация программы.

В этом треде народ активно путает два понятия.

PolarFox ★★★★★
()

Правомерно ли приравнивать конкурентность к параллельности? Вроде, это все-таки, разные вещи, типа, конкурентность же - это иллюзия параллельности, ее имитация.

Чем конкурентность отличается от параллельности, хорошо и наглядно описано в одной из последних глав RWH, например.

yoghurt ★★★★★
()
Ответ на: комментарий от buddhist

Переформулирую твой вопрос: зачем снимают порнофильмы с сюжетом?

потому что это искуство, в отличие от очередного голливудского шедевра, где сюжет не обязателен.

der_looser ★★
()

И правда, пора мне уже пойти пообедать

af5 ★★★★★
()
Ответ на: комментарий от buddhist

ну это клёво, когда они с сюжетом. мне такие нравятся.

Komintern ★★★★★
()
Ответ на: комментарий от der_looser

ниправда, на скилле надо тащить. или ты из тех кто играет только в «правильный 1.3» а не в «этот ваш казуальный 1.6»?

val-amart ★★★★★
()
Ответ на: комментарий от val-amart

когда у меня появился первый комп, то в 1.6 уже рубились. а го превратили из динамичного шутера в квест по поиску кемперов, особенно на ацтеке! как по кукурузному полю бегаешь! зато графон, мать ихнюю! ладно хоть сурс успели из казуалки в боль-менее играбельное состояние привести. но я бы и дальше в 1.6 рубился, жалко серваки потихоньку вымирают уже. потому играюсь в сурс. а го вообще удалил. типичная йоба, в которой от контры только название.

der_looser ★★
()

Есть только спагетти это печаль_беда.

философ → китайский философ
вилки → палочки

aes_ultimum ★★
()
Ответ на: комментарий от val-amart

да, я и не утверждал, что они все сдохли. но вот толковых без выпендрежа год от года все меньше и меньше. дедушки уходят, а молодежи графон подавай.

der_looser ★★
()

Детектирую автора по 1-му абзацу.

encyrtid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.