![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
есть n одинаковых процессов, нужно с помощью семафоров сделать так чтобы в критическую секцию зашел только нужный процесс(например процесс с номером p).
т.е какойто другой процесс решает какому из n процессов зайти и каким-то образом с помощью семафоров сообщает нужному чтобы тот прошел дальше. Добавлено через 8 минут и 55 секунд забыл добавить, можно использовать только 1 семафор --------------------
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
4eJIoBekMoJIekyJIa,
я так полагаю, используется System V IPC здесь есть небольшая трудность чтобы реализовать такую схему нужно, чтобы каждый из N процессов обладал неким уникальным ресурсом для его идентификации причем этот ресурс должен быть типа short (или преобразовываться к нему без потери разрядов) тогда алгоритм работы примерно следующий инициализируем семафор нулем синхронизирующий процесс посредством semctl() устанавливает значение семафора равным значению уникального ресурса процесса каждый из N процессов делает следующее
Это сообщение отредактировал(а) MAKCim - 28.12.2007, 10:56 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Значение resource предпологается равным порядковому номеру процесса.
Только один вопрос, ведь возможна такая ситуация: Пусть должен пройти 80 процесс, и пусть первым операцию над семафором выполнит 100-й процесс, т.е он изменит значение семафора на 20, после чего вернется в начало цикла, а потом управление передастся 20-му процессу(в это время значение семафора будет равно 20), тот изменит значение семафора 0 и пройдет в критичесскую секцию... Возможно я не правильно что-то понял, не мог ты пояснить. --------------------
|
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
4eJIoBekMoJIekyJIa,
последовательность операций, передаваемых в semop() либо выполниться атомарно, либо вообще не выполняется т. е если после уменьшения на величину resource значение семафора будет ненулевым, произойдет откат до первоначального значения семафора Добавлено через 3 минуты и 38 секунд
он вообще ничего не изменит, т. к 100 > 80 и задан флаг IPC_NOWAIT 100 - порядковый номер процесса значение семафора останется равным 80 (см. выше) -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
ой, точно ступил
А каким образом происходит откат к первоначальному значению семафора? Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 28.12.2007, 13:35 --------------------
|
|||
|
||||
MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
детали реализации если очень хочется смотри здесь sys_semop() Добавлено @ 14:08
Это сообщение отредактировал(а) MAKCim - 28.12.2007, 14:10 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: -2 Всего: 52 |
Пардон, народ, а что такое семафор?
-------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
неужели так трудно в гугле/википедии посмотреть? ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |