1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||||||
1 | |||||||||||
Dining philosophers problem03.05.2013, 14:44. Показов 1549. Ответов 3
Метки нет (Все метки)
Не уверен что это тот раздел что мне надо, но раз уж я реализовываю на java то пускай будет он.
Собственно сама задача если кто никогда не встречался с ней: Пять безмолвных философов сидят вокруг круглого стола, перед каждым философом стоит тарелка спагетти. Вилки лежат на столе между каждой парой ближайших философов. Каждый философ может либо есть, либо размышлять. Приём пищи не ограничен количеством оставшихся спагетти — подразумевается бесконечный запас. Тем не менее, философ может есть только тогда, когда держит две вилки — взятую справа и слева. Каждый философ может взять ближайшую вилку (если она доступна), или положить — если он уже держит её. Взятие каждой вилки и возвращение её на стол являются раздельными действиями, которые должны выполняться одно за другим. Классическая задача, думаю всем известно почему может возникнуть deadlock и голодание философов, так вот я при написании решения сделал некую хитрость и теперь не могу до конца понять спасает ли она меня от деадлока или нет, но опишу всё подробно: Есть 5 философов (объекты Philosopher), каждый из них при создании узнаёт свой номер + получает объекты левая и правая вилка чтобы знать что хватать (у меня это объекты Lock). Ключевой особенностью я сделал то что в зависимости от номера философа он пытаеться ухватить первой либо левую вилку, либо правую
0
|
03.05.2013, 14:44 | |
Ответы с готовыми решениями:
3
Problem Problem subversion problem problem with image |
03.05.2013, 23:27 | 2 |
это у вас рейс кондишен скорее чем дедлок )
всем надо 2 вилки и их могут захватить разные потоки в вашей вилке синхронизация по классу и так у вас никакого дедлока не будет, так как одномоментно доступен только 1 метод можно было даже не брать синхронизированный вектор итак в метод никого не пустят вы проверьте у вас в векторе не более 1 обьекта за раз ) принтите его после постановки в очередь
1
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
04.05.2013, 14:36 [ТС] | 3 |
mutagen, ну я проверил тем что установил время кушания = пара секунд, а время размышления = 0 ну и за 5 минут дедлок не получился так что вроде всё хорошо.
Добавлено через 3 минуты Не-не, тут именно дедлок, в обычной задаче может получиться так что все могут ухватить по левой вилке сразу и потом правой ни для кого не останется же. Ещё возможно голодание одного из философов (у меня это решено тем что есть очередь тех кто "забил" вилку) если какой-то поток не очень удачно будет попадать по времени так что у него всё время перед носом будут вытягивать ресурс.
0
|
04.05.2013, 14:39 | 4 |
ну вот тут какраз и не работает, так как синхронизация по классу, в очереди всегда 1, не более
0
|
04.05.2013, 14:39 | |
04.05.2013, 14:39 | |
Помогаю со студенческими работами здесь
4
Problem CPU IDE Problem Intialization problem Windows 7 ЦП problem Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |