【问题标题】:Can a shared memory space send data (non-POD) to another shared memory?共享内存空间可以将数据(非 POD)发送到另一个共享内存吗?
【发布时间】:2015-07-19 05:44:45
【问题描述】:

我正在开发一个支持并行的开源项目 工作站网络上的计算,像元组空间分布式共享内存消息传递等。

不要过于宽泛,假设我们有某种伪 IPC 通信,它涉及处理多种类型,但它应该在有限的时间内处理大量查询.我对此的解决方案是使用两个共享内存池或至少两个共享内存池部分。

我在考虑#pragma data_seg 或两个内存映射文件,但这意味着所有进程都必须使用同一个文件映射对象的名称或句柄,我不确定这是否对我不利。同一个类的两个实例可以理解共享内存中的数据,但是如果在过渡到第二个共享内存池的过程中,实例被修改了怎么办?

第二个共享内存空间能否理解第一个共享内存空间处理的信息,而不会减慢新创建的数据“生态系统”?

我希望我设法正确地重写了答案。

【问题讨论】:

  • Boost 有一个 library 。通常,您必须通过不使用指针或引用来处理指针和引用;对替代方案的讨论可能过于宽泛,无法给出简单的答案。
  • 我明白这些词,但不明白它们的意思。您能否举例说明您正在努力实现的目标,并提供更多详细信息?
  • 我知道普通的旧数据应该做得很好。我还编辑了我的问题以指出具体情况。

标签: c++ ipc shared-memory


【解决方案1】:

问题还没有完全形成 - POD 类型绝对没问题 - 但是你提出 std::string 这意味着你正在使用指针等查看非 pod 类型。

你必须小心使用指针。 Boost 采用智能指针的方法,该方法在以下前提下工作:offets 相对于共享内存区域的开始是安全的,并且可以跨进程共享。但是要将它放到另一个内存池中,您需要正确地复制它 - 通过在第二个共享内存中分配一个实例并将该实例复制到那里。

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 1970-01-01
    • 2014-10-08
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多