2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 101
|
||||||
1 | ||||||
Обедающие философы, уменьшить возможность возникновения deadlock-а07.10.2016, 12:54. Показов 4062. Ответов 11
Метки нет (Все метки)
Есть программа, которая решает задачу обедающих философов.
0
|
07.10.2016, 12:54 | |
Ответы с готовыми решениями:
11
Обедающие философы Обедающие философы Обедающие философы Процессы, Обедающие философы |
07.10.2016, 16:34 | 2 |
А в каком кейсе текущая имплементация позволяет схватить дедлок? Что-то из кода не пойму..
1
|
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 101
|
|
09.10.2016, 14:36 [ТС] | 3 |
Вероятность дедлока увеличивается, если в функциях eat и think убрать sleep(). Подскажите, пожалуйста, что нужно изменить?
0
|
10.10.2016, 08:06 | 4 | |||||
Ну я бы сделал так:
1
|
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 101
|
|
10.10.2016, 16:39 [ТС] | 5 |
Спасибо огромное! А можете объяснить принцип работы private Object mutex()? Насколько я поняла, это взаимное исключение?
0
|
10.10.2016, 16:53 | 6 |
Не понял, что вы под этим понимаете. Это специальный мьютекс -- объект по которому будет идти блокировка доступа. Он спроектирован так (сейчас могу неточно объяснить, ибо сам новичок в джаве, так что терминология достаточно новая), чтобы гарантировать детерминированное состояние в среде конкурентного доступа. На нем фиксируется монитор. Механизм работы в принципе вам станет ясен, если вы по шагам каждую инструкцию рассмотрите.
1
|
10.10.2016, 19:21 | 7 | |||||
HighPredator, Зачем все эти пляски с ленивой инициализацией volatileMutex?
Обычно лок объявляют как
1
|
10.10.2016, 23:03 | 8 |
Увидел у гугла, понравилось, пользую везде И это вроде не ленивая инициализация, а double-checking locking idiom если не ошибаюсь.
0
|
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 101
|
||||||
11.10.2016, 18:23 [ТС] | 9 | |||||
То есть должно получиться так?
0
|
11.10.2016, 18:29 | 10 |
Линда95, да. eat можно вызывать только когда оба лока захвачены
Но, вот если так прямо сделать - то в вашем коде будет возможен deadlock. Нужно хитро захватывать локи, чтобы такого не было.
1
|
2 / 2 / 0
Регистрация: 22.11.2013
Сообщений: 101
|
|
12.10.2016, 19:31 [ТС] | 11 |
0
|
12.10.2016, 21:29 | 12 | |||||
Сообщение было отмечено turbanoff как решение
Решение
На википедии описаны возможные решения - https://ru.wikipedia.org/wiki/Проблема_обедающих_философов
Вот решение с официантом:
2
|
12.10.2016, 21:29 | |
12.10.2016, 21:29 | |
Помогаю со студенческими работами здесь
12
Обедающие философы, Critical Section Обедающие философы, перевод с Delphi Обедающие философы. Решение методом монитора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |