65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
||||||
1 | ||||||
Выборка данных из общей памяти07.11.2013, 19:56. Показов 967. Ответов 13
Метки нет (Все метки)
пишу пул процессов для сервера,пул располагается в общем сегменте памяти,с которым все процессы и будут работать,для теста просто пробую добавить один процесс в пул и затем вывести его pid,но именно в момент, когда я пытаюсь это сделать - происходит сегментэйшен фолт(после 129 строки в коде) :
0
|
07.11.2013, 19:56 | |
Ответы с готовыми решениями:
13
Создание переменных в сегменте общей памяти Доступ процессов к общей области памяти Уменьшение общей памяти Механизм общей памяти |
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
07.11.2013, 20:26 | 2 |
shmget()+shmat() после fork() не нужен, ребенок и так унаследовал это от родителя, а в таком виде shmat() мапит память в другое место, и соотвественно родитель и другие дети получают указатели в никуда. Т.е. либо делаете shmat() один раз в родителе, либо используете в своих структурах не указатели, а смещения.
ЗЫ: еще можно man queue ЗЗЫ: а зачем вообще хранить пиды?
1
|
65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
|||||||||||
07.11.2013, 20:32 [ТС] | 3 | ||||||||||
g_u_e_s_t,
хедер
ради того,чтоб вывести и убедиться,что всё работает нормально,потом уберу большое вам спасибо,помогло
0
|
65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
|
07.11.2013, 20:37 [ТС] | 5 |
g_u_e_s_t,
0
|
65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
|
07.11.2013, 20:42 [ТС] | 7 |
g_u_e_s_t, пул - это ,вроде, и есть названное вами понятие
Добавлено через 1 минуту в моём случае процессы после выполнения задачи будут не уничтожаться,а возвращаться обратно в очередь свободных процессов
0
|
65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
|
07.11.2013, 20:56 [ТС] | 9 |
g_u_e_s_t, ну вот нафоркаю я процессов,с каждым из них будет связан семафор,очередь будет собственно их и содержать,когда главный процесс будет принимать запрос от клиента,он отдаст задачу процессу из очереди,просто сделав sem_post семафору из очереди,в этот момент этот семафор из очереди убирается,чтобы после выполнения процесса добавить его в конец очереди,то есть такая круговая работа получится,вместо очереди можно и кольцевой список взять,да что угодно) ну я себе просто реализацию задачи таким образом представляю,если вы знаете более логичный вариант,то прошу его озвучить
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
07.11.2013, 21:14 | 10 |
Для этого нужно более-менее чётко понимать, что же именно Вы сделать хотите А так только абстрактно рассуждать можно. Например родитель может складывать запросы в очередь, а дети ее разгребают (писатель->читатели). Или пусть дети сами принимают запросы - т.е. вообще никаких очередей и shm если конечно не подрозумеваются какие-то общие данные.
1
|
65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
||||||
07.11.2013, 21:45 [ТС] | 11 | |||||
g_u_e_s_t, хотел сделать такого плана http://www.osp.ru/pcworld/2008/11/5685083/
Добавлено через 15 минут g_u_e_s_t, а как задачу в очередь добавить? ну вот делаю я в главном процессе
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
07.11.2013, 21:57 | 12 |
На цели озвученные по ссылке по-моему хорошо годиться POSIX или SYSV очереди сообщений.
Но... В сосдней теме ссылка на github где среди прочего, рядом лежит код из этого топика для тех целей проще всего отдать accept() на откуп детям т.е. обойтись вообще без shm, плясок с передачей дескриптора ребенку и прочего, семафор тоже не понадобиться если listen() сокет будет один. Добавлено через 4 минуты Написал, потом увидел Вашу добавку. У Вас как я понял не "очередь заданий", а список свободных процессов. Т.е. берете процесс из этого списка, помечаете его как занятый, отдаете ему дескриптор полученный от accept() через sendmsg()
1
|
65 / 37 / 3
Регистрация: 30.11.2011
Сообщений: 109
|
||||||
07.11.2013, 22:11 [ТС] | 13 | |||||
g_u_e_s_t, спасибо,но я не совсем пойму,как мне процессу определённому передать дескриптор через sendmsg,если можно - приведите короткий пример,я тут ещё обнаружил такою "фичу",если её можно так назвать
этот цикл то ли выполняется только 1 раз,то ли не знаю,в общем сообщение child created только 1 раз выводится :
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
07.11.2013, 22:18 | 14 |
greenEYE, погуглите "unix fd passing"
в приведенном кусочке проблем кроме буквы q в конце 14строки не вижу
1
|
07.11.2013, 22:18 | |
07.11.2013, 22:18 | |
Помогаю со студенческими работами здесь
14
Механизм общей памяти и attach к процессу Клиент-сервер на основе общей памяти с использованием семафоров Распределение данных по разным таблицам в exel при заполнении общей базы данных Модель распределения памяти разделами переменного размера с общей очередью, стратегия "наименее подходящий" Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |