【发布时间】:2018-03-19 19:33:05
【问题描述】:
我遇到了 Boost managed_shared_memory 的设计/实施问题。
问题
我有两个进程:Writer 和 Reader。
-
这里的
Writer是一个C++ 可执行文件,它使用boost 写入共享内存。写法的代码截图:shm_controller.reset(new boost::interprocess::managed_shared_memory( boost::interprocess::open_or_create, shmName, size)); void * addr = shm_controller->allocate(size) ; shm_controller->deallocate(addr);一旦我有了 addr 指针,我就使用
memcpy在 SHM 中写入。 -
另一方面,我有
Reader,它是 C 可执行文件。他们都通过消息传递应用程序进行通信。我是这样写Reader代码的:-
Writer是传递地址,该地址存储在“addr”中(来自上面的代码快照)到Reader。 - 一旦
Reader收到地址和大小,我使用memcpy从Reader的局部变量写入SHM 数据。
-
注意 1:(这个
Reader没有使用任何 boost shm API,因为它是 C 应用程序)
注2:我在Writer和Reader上验证的地址相同(通信后)。
但是 Reader 的 memcpy 读取 shm 数据导致我的可执行文件 (Reader) 崩溃。
问题
- 我们可以在 C 中使用
boost::interprocess::managed_shared_memory吗?? - 上述部分是否存在任何实施问题。 (
Reader不能通过指针访问Writer的 shm) - 有没有办法像任何包装器实现等一样解决这个 C 和 C++ 限制?
【问题讨论】:
标签: c++ c boost shared-memory boost-interprocess