|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
||||||
Задача с семафорами21.02.2016, 20:36. Показов 4714. Ответов 33
Дана такая задача:
Железная дорога, соединяющая города A и B, имеет участок с одним путем. Пусть движение поездов из A в B и из B в A – процессы. Используя семафоры, запрограммировать движение поездов таким образом, чтобы в любой момент времени по единственному пути поезда двигались только в одном направлении. Рассмотреть проблему бесконечного ожидания, варианты ее решения Моё решение (w_ — означает west, приведен код только для движения в одну сторону — с запада на восток, в другую сторону — симметрично)
Есть ли в этом решении ошибки и есть ли более оптимальное решение?
0
|
||||||
| 21.02.2016, 20:36 | |
|
Ответы с готовыми решениями:
33
работа с семафорами Работа с семафорами Работа с семафорами. |
| 23.02.2016, 13:33 | ||||
0
|
||||
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
|||||
| 23.02.2016, 13:56 [ТС] | |||||
|
0
|
|||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|||||||||
| 23.02.2016, 15:14 | |||||||||
|
Вы имели ввиду алгоритм, который описал Fulcrum_013. Igor3D же считает Вашу постановку задачи "куда более простой". Просто Igor3D не такой формалист, как я, и готов Теперь я вижу, что Ваш вариант работает так, как описал Fulcrum_013. (то есть, я предположил неправильно) Например, Вы могли: Привести алгоритм, который Вы хотите реализовать (то, что написал Fulcrum_013). Привести код, который можно запустить (например, в идеале - дополнительно дать ссылку на ideone.com).
Добавлено через 1 минуту Фактически, в Вашем коде поезда проходят в том порядке, в котором они подошли.
0
|
|||||||||
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
||||||
| 23.02.2016, 16:00 [ТС] | ||||||
|
0
|
||||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
||||||
| 23.02.2016, 16:20 | ||||||
|
Если пришёл поезд с запада, то он поедет сразу за всеми поездами, которые едут с запада, то есть, в "порядке живой очереди". Если пришёл поезд с востока, то он захватит "чужой" turnstile и будет ждать lock. То есть, он проедет после того, как проедут все поезда с запада, которые подошли раньше него. Но не даст проехать ни одному поезду с запада, которые приедут после него (они будут ждать свой turnstile). То есть, опять "порядке живой очереди". Предположу, что задачу нужно решить с использованием семафоров и без использования counter. Добавлено через 2 минуты
0
|
||||||
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
||||||
| 23.02.2016, 17:02 [ТС] | ||||||
|
0
|
||||||
|
Модератор
3141 / 2289 / 469
Регистрация: 26.03.2015
Сообщений: 8,912
|
|||||
| 23.02.2016, 17:53 | |||||
|
0
|
|||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 24.02.2016, 02:56 | ||
|
0
|
||
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
|||||||||
| 24.02.2016, 07:06 [ТС] | |||||||||
|
Shamil1,
http://ideone.com/w8AGc4
0
|
|||||||||
| 24.02.2016, 09:11 | |||||||||||||||||
, но все жеПусть Вашего кода нет, только условие. Что тут военного? Да ничего, псевдокод
Разберемся с усыплением/побудкой поездов. Я бы сделал так
Итого: все цивильно, в любой момент времени мы можем знать сколько куда едет и сколько где ждет Не по теме: Ну вот, сейчас опять начнет "носик воротить" ("меня интересует" и все такое). Не, пошел, устал с таким :) Добавлено через 30 минут Ошибка: push_back должно выполняться по мутексом, (а acquire нет). Ну ничего, подправит
0
|
|||||||||||||||||
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
|||||
| 24.02.2016, 11:18 [ТС] | |||||
|
В любом случае, спасибо за решение. Правда, мне кажется, если будет много поездов с обеих сторон, они будут проходить по очереди. Дело в том, что поезда того же направления также «попадают» в свой вектор. Когда пробуждаются потоки противоположного направления, первый-то проходит (numTrain == 0), но следующие ждут из-за waitSem[invIndex] == 0. Ждут — то есть их семафоры помещаются в свой вектор, потом пробуждаются потоки противоположного направления и так далее. Может, что-то ещё есть, надо подумать... Добавлено через 47 минут Ещё одна интересная особенность. Пусть сейчас едут западные поезда. Потом восточный поезд прерывается на 10 строке в первом блоке кода, сразу после мьютекса. Пусть все западные поезда приходят и новых нет. Последний поток освобождает все восточные поезда. Тут возобновляется прерванный восточный поезд и добавляет себя в пустой вектор. Если теперь будут идти только восточные поезда, то этот рассматриваемый поезд никогда не проедет!
0
|
|||||
| 24.02.2016, 12:10 | |||||||||||||
![]() ![]() Не нужно говорить "меня интересует полное решение", это разговор заказчика с исполнителем (и то иногда). А на форумах Вам никто ничего не должен. В большинстве случаев не нужно показывать свой код (тем более доказывать что он лучше) - наоборот, лучше посмотреть как будут делать другие. Может и удастся чего-то позаимствовать, а свой код никуда не убежит.
![]() Добавлено через 5 минут
0
|
|||||||||||||
|
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 27
|
|||||||||||||
| 24.02.2016, 13:30 [ТС] | |||||||||||||
|
Добавлено через 3 минуты Добавлено через 18 минут
0
|
|||||||||||||
| 25.02.2016, 04:11 | ||||||
|
Вот полный, почищенный текст, компилится. Более четкий "пуск пачки". Добавил управление (см комментарии)
Кликните здесь для просмотра всего текста
1
|
||||||
| 25.02.2016, 04:11 | |
|
Пул потоков с семафорами Пример программы с семафорами Написать программу с семафорами которая входит в критическую секцию Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|