0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 3
|
||||||
1 | ||||||
Сигналы для синхронизации процессов13.12.2013, 09:00. Показов 5621. Ответов 6
Метки нет (Все метки)
Добрый день.
Мне нужно написать программу для синхронизации процессов с помощью сигналов под Солярис. Надо использовать sigaction, sigprocmask, sigsuspend. Если подробнее, то смысл в том, чтобы процесс создал потомка, который, например, будет считать какую-то линейную функцию. А родитель будет считать квадратные корни. Когда один из них заканчивает расчёт, он отправляет другому сигнал. Тот, кто первым посчитал, ждёт, пока посчитает второй. После этого они в своих циклах переходят к следующим расчётам. В общем мне нужно исправить ошибки в коде:
Если не трудно, подскажите, как можно это исправить.
0
|
13.12.2013, 09:00 | |
Ответы с готовыми решениями:
6
Взаимодействие процессов. Сигналы Создание процессов - Сигналы Задача упорядочивания (синхронизации) процессов Понятие синхронизации потоков и процессов. Семафоры и мьютексы |
4 / 4 / 7
Регистрация: 18.11.2013
Сообщений: 53
|
|
13.12.2013, 14:27 | 2 |
Тебе по ТЗ нужно использовать sigaction, sigprocmask, sigsuspend, или можно без блокировок сигналов?
0
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 3
|
|
13.12.2013, 17:27 [ТС] | 3 |
Да, у меня в задании говорится так. Всё дело в sigprocmask в функциях обработки сигналов?
0
|
1241 / 960 / 379
Регистрация: 02.09.2012
Сообщений: 2,936
|
|
14.12.2013, 00:44 | 4 |
Смотрел по диагонали. Применение sigsuspend показалось сомнительным - не совосем то действие. Замените на sigwait и поставьте ожидание соответ. сигнала от соседа. Потому что сейчас они у вас в дедлок становатся, потому что ждут неизвестно чего друг от друга.
0
|
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 3
|
|
14.12.2013, 10:37 [ТС] | 5 |
Исправил sigsuspend на sigwait, дедлок исчез, но процессы не ждут друг друга. Сначала потомок выполняет все свои циклы, потом отец. А вывод должен чередоваться.
0
|
4 / 4 / 7
Регистрация: 18.11.2013
Сообщений: 53
|
|
16.12.2013, 10:40 | 6 |
функция fork создает полную независимую копию, но как узнать где созданная копия(Chiild) или оригинал(parent) , родителю он возвращает PID ребенка, а ребенку 0, судя по твоему коду ребенок у тебя выполнит сначало блок if, а потом нижний код, а родитель не попадет под условие if и будет выполнять сразу нижний код! проверь может проблема в этом
0
|
1241 / 960 / 379
Регистрация: 02.09.2012
Сообщений: 2,936
|
||||||
17.12.2013, 16:30 | 7 | |||||
А кто у вас PID инициализирует? чему оно равно? кому вы сигнал посылаете?
Добавлено через 23 часа 57 минут Посмотрел внимательно ваш код. Попытался сделать как должно работать по моим представлениям. Не проверял - может накосячил где-то.
0
|
17.12.2013, 16:30 | |
17.12.2013, 16:30 | |
Помогаю со студенческими работами здесь
7
Что значат эти сигналы (vmware w, bios сигналы)? Программа для синхронизации Софт для синхронизации Триггер для синхронизации полей Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |