| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > как можно это реалтзовать |
| Автор: 4eJIoBekMoJIekyJIa 25.12.2007, 19:50 |
| есть n одинаковых процессов, нужно с помощью семафоров сделать так чтобы в критическую секцию зашел только нужный процесс(например процесс с номером p). т.е какойто другой процесс решает какому из n процессов зайти и каким-то образом с помощью семафоров сообщает нужному чтобы тот прошел дальше. Добавлено через 8 минут и 55 секунд забыл добавить, можно использовать только 1 семафор |
| Автор: MAKCim 26.12.2007, 14:49 | ||
| 4eJIoBekMoJIekyJIa, я так полагаю, используется System V IPC здесь есть небольшая трудность чтобы реализовать такую схему нужно, чтобы каждый из N процессов обладал неким уникальным ресурсом для его идентификации причем этот ресурс должен быть типа short (или преобразовываться к нему без потери разрядов) тогда алгоритм работы примерно следующий инициализируем семафор нулем синхронизирующий процесс посредством semctl() устанавливает значение семафора равным значению уникального ресурса процесса каждый из N процессов делает следующее
|
| Автор: 4eJIoBekMoJIekyJIa 28.12.2007, 03:00 |
| Значение resource предпологается равным порядковому номеру процесса. Только один вопрос, ведь возможна такая ситуация: Пусть должен пройти 80 процесс, и пусть первым операцию над семафором выполнит 100-й процесс, т.е он изменит значение семафора на 20, после чего вернется в начало цикла, а потом управление передастся 20-му процессу(в это время значение семафора будет равно 20), тот изменит значение семафора 0 и пройдет в критичесскую секцию... Возможно я не правильно что-то понял, не мог ты пояснить. |
| Автор: 4eJIoBekMoJIekyJIa 28.12.2007, 13:30 |
| ой, точно ступил А каким образом происходит откат к первоначальному значению семафора? |
| Автор: MAKCim 28.12.2007, 13:54 | ||||
детали реализации если очень хочется смотри http://www.linux-m32r.org/lxr/http/source/ipc/sem.c#L1280 sys_semop() Добавлено @ 14:08
|
| Автор: Rickert 7.1.2008, 07:16 |
| Пардон, народ, а что такое семафор? |
| Автор: MAKCim 7.1.2008, 10:37 |
неужели так трудно в гугле/википедии посмотреть? |