我对此特别密集,但似乎我错过了一个重要的基本点或其他东西,因为我想做的事情应该是常见的:
我需要从管理器进程 ( Process M
) 创建一个固定大小的环形缓冲区对象。该对象具有从缓冲区写入/读取的方法write()
。read()
读/写方法将由独立进程(Process R
和W
)调用
我已经实现了缓冲区,SharedBuffer<T&>
它使用 boost::interprocess 在 SHM 中分配缓冲区插槽,并在单个进程中完美运行。我已经阅读了这个问题的答案以及关于 SO 的答案,以及我自己的问题,但我仍然对如何从一个公共对象有不同的进程访问方法一无所知。Boost 文档有一个在 SHM 中创建向量的示例,这与我想要的非常相似,但我想实例化我自己的类。
我目前的选择是:
new
正如 Charles B. 对我的问题所建议的那样,使用放置位置;但是,他警告说,将非 POD 对象放在 SHM 中并不是一个好主意。但是我的班级需要读/写方法,我该如何处理?- 在我的类定义中添加一个分配器,例如,拥有
SharedBuffer<T&, Alloc>
并继续类似于boost 中给出的向量示例。这听起来真的很复杂。 - 更改
SharedBuffer
为 POD 类,即去掉所有方法。但是那么如何在进程之间同步读写呢?
我错过了什么?固定长度的环形缓冲区很常见,所以要么这个问题有解决方案,要么我做错了什么。