Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
программирование Unix |
Философия, технологии, алгоритмы! |
|
Опции темы |
19.07.2006, 12:05 | #3 |
Форумец
Сообщений: 43
Регистрация: 28.02.2006
Возраст: 40
Не в сети |
Привет. У меня такой вопрос. Я сейчас разбираюсь в тем взаимодействия процессов. И вот вопрос - почему не работает такая реализация:
Выоплянется 5 процессов, значение X у каждого процесса свои Y - общая, куда я хочу записать окончательный результат который выглядит как сумма всех X-ов semop(sem,&g_Decrease,1); Y=Y+X; semop(sem,&g_Increase,1); &g_Decrease-операция понижения &g_Increase-операция повышения Изначально значение семафора 1 (создается с помощью semctl) |
19.07.2006, 19:44 | #4 |
Форумец
Сообщений: 653
Регистрация: 04.10.2003
Не в сети |
Вообще не вижу смысла применять сдесь семафоры (их функционал расчитан на немного другие нужды) , хотя приведённую задачу и мождно реализовать с их помощью , но представленный код не совсем соответствует требуемому функционалу.
Подобные задачи обычно реализовывают с помощью мьютексов (mutex). Прежде чем какой либо процесс обратится к общей переменной Y , он должен заблокировать mutex , а после всех операций с Y разблокировать его. Все остальные процесы, в это время, ждут своей очереди и , при освобождении мьютекса , след. процесс повторяет вышеописанный алгоритм. И так все. Задача довольно тривиальнная и легко реализуется в любой современной ОС. автор Т |