LINUX.ORG.RU

c++: Разделяемые объекты [?]


0

0

Существует ли какой-нибудь механизм для создания разделяемых между процессами объектов?
Что-то вроде динамической библиотеки, но только с возможностью изменения данных во время работы и видимостью этих измененных данных остальным подгрузившим ее процессам. Насколько я понимаю, у библиотек при записи (типа изменения адреса), для изменившего процесса создается его собственная приватная копия.

anonymous

1. закодить объекты так, чтоб они не имели полей которые являются указателями (или содержат оные), вместо указателей использовать оффсеты (относительно этого объекта или некоего глобально известного "базового адреса").

2. выделить кусок shared memory

3. забузылить туда объект при помощи placement new.

4. ПРОФИТ!^W развлекаться с межпроцессорной синхронизацией и отладкой :-)

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

в необходимости пункта 1 не уверен.

Возможно, ОС позволит всем процессам замапить этот кусок shared memory по одному и тому же адресу (и не окажется несчастного у которого этот диапазон адресов занят какой-то подгруженной им либой или еще чем). Кто знает про это выскажитесь плз.

gods-little-toy ★★★
()

тю, сериализовать/десериализовать объекты в shared memory. гугли.

generatorglukoff ★★
()
Ответ на: комментарий от svu

Вот за d-bus спасибо, как-то о нем не подумал! Мне как раз что-то вроде шины и было нужно. К тому же, мне эту полезняшку надо еще и на оффтопик перенести (офф: полный идиотизм - вся работа идет под линуксом, но а рабочих компах стоит винда и снести нельзя - работаем по ssh), а он вроде как туда портирован.

anonymous
()
Ответ на: комментарий от gods-little-toy

Можно использовать для этого boost::interprocess, там есть готовые аллокаторы shared_mem/mmap-ов, готовые коллекции без использования указателей и т.д.

Там и с кроссплатформенностью все ок.

YesSSS ★★★
()
Ответ на: комментарий от YesSSS

да, interprocess хорошая библиотека, я на ней пару лет назад одну софтину делал с хорошей нагрузкой

ott ★★★★★
()
Ответ на: комментарий от gods-little-toy

> Возможно, ОС позволит всем процессам замапить этот кусок shared memory по одному и тому же адресу (и не окажется несчастного у которого этот диапазон адресов занят какой-то подгруженной им либой или еще чем).

mmap и shmat позволяют указать желаемый адрес, но если он занят или ещё по каким причинам "недоступен", то чуда не случится. В общем случае нельзя рассчитывать, что у нескольких процессов успешно примапится кусок памяти в одно и то же место.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.