The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Вопрос связанный с синхронизацией, и шаредной памятью"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Вопрос связанный с синхронизацией, и шаредной памятью" 
Сообщение от Man_With_No_Name_ emailИскать по авторуВ закладки(ok) on 24-Апр-05, 03:06  (MSK)
У меня есть две нити, которые должны использовать общую память.  
Принцип работы такой:
1)создаётся структура в шаредной памяти, есть её пид
2)fork()
3) у одного процесса shmat() - получаю указательна неё
4) у второго аналогично
5) у структуры есть поле - указатель на некую область памяти, я хочу, чтоб она была видна из обоих нитей. В одной нити я делаю shmget, и вот указатель в той структуре настраиваю через shmat на эту область памяти
6) в другой нити имея структуру, и то есть указатель хочу получить доступ к этой области памяти, которую только что выделил, но получаю Segmentation Fault.

Вопрос такой: как мне можно сделать такой доступ, какой я пытался сделать.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Вопрос связанный с синхронизацией, и шаредной памятью" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 24-Апр-05, 18:07  (MSK)
>У меня есть две нити, которые должны использовать общую память.
>Принцип работы такой:
>1)создаётся структура в шаредной памяти, есть её пид

pid структуры в шаредной памяти ?????

>2)fork()
>3) у одного процесса shmat() - получаю указательна неё
>4) у второго аналогично

Тезис: указатели получены разные. То бишь два процесса картируют
одну и ту же область общей памяти, каждый из них присваивает этой
области памяти свой собственный диапазон виртуальных адресов.

>5) у структуры есть поле - указатель на некую область памяти, я
>хочу, чтоб она была видна из обоих нитей. В одной нити
>я делаю shmget, и вот указатель в той структуре настраиваю через
>shmat на эту область памяти
>6) в другой нити имея структуру, и то есть указатель хочу получить
>доступ к этой области памяти, которую только что выделил, но получаю
>Segmentation Fault.

Чего и следовало ожидать. Указатель, действительный в адресном
пространстве одного процесса, недействителен в адресном пространстве
другого. Скажу больше: поскольку shmat() на вновь созданную структуру
выполнен только в одном из процессов, в другом возможности обратиться
к соответствующему блоку просто нет. Данный блок не спроецирован в
адресное пространство того процесса, в коем происходит обращение.

>
>Вопрос такой: как мне можно сделать такой доступ, какой я
>пытался сделать.
>

Честно: я не понял, в чём состояла цель столь странных манипуляций.
А потому внятно ответить на последний вопрос я не могу :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Вопрос связанный с синхронизацией, и шаредной памятью" 
Сообщение от MaximKuznetsov Искать по авторуВ закладки on 24-Апр-05, 20:42  (MSK)
>У меня есть две нити, которые должны использовать общую память.
если это действительно нити, то и создавайте их через pthread_create

>Принцип работы такой:
>1)создаётся структура в шаредной памяти, есть её пид
видемо имеется в виду ключ..
>2)fork()
>3) у одного процесса shmat() - получаю указательна неё
>4) у второго аналогично
>5) у структуры есть поле - указатель на некую область памяти, я
что за некая область памяти ? Если это поле упомянутой структуры,
то помещаете смещение поля, а не абсолютный адрес...если это еще одна shared mem., то укажите ее ключ..
>хочу, чтоб она была видна из обоих нитей. В одной нити
>я делаю shmget, и вот указатель в той структуре настраиваю через
>shmat на эту область памяти
>6) в другой нити имея структуру, и то есть указатель хочу получить
>доступ к этой области памяти, которую только что выделил, но получаю
>Segmentation Fault.
>
>Вопрос такой: как мне можно сделать такой доступ, какой я пытался сделать.
1) использовать нити (то есть одну большую память)и не заморачиваться с разделением памяти между задачами..
2) точнее формулировать вопросы


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру