我可以多次访问boost :: interprocess :: managed_shared_memory而无需再次打开它吗?

时间:2014-10-10 14:09:16

标签: c++ boost boost-interprocess

我正在使用boost::interprocess::managed_shared_memory来创建跨进程共享的内存。

以下是采取的步骤:

  1. 步骤

    a) Create memory.
    
  2. 步骤

    a) Open memory. 
    b) Write to memory
    
  3. 步骤

    a) Open memory.
    b) Read from memory.
    c) Open memory.
    d) Read from memory.
    e) Open memory.
    f) Read from memory.
    g) ...... and so on and so forth!
    
  4. 现在,问题是,在步骤3中,我在阅读之前一次又一次打开内存!我认为这是多余的行为。

    如何只打开一次才能读取多次?

    实际上,open命令在性能方面非常昂贵,这在我的应用程序中被证明是一个瓶颈。

2 个答案:

答案 0 :(得分:5)

这个想法应该是只打开一次共享资源(在这种情况下为内存),然后重复使用相同的句柄/变量/对象来一次又一次地对其进行评估。

以下任何一种方法均可:

  1. 如果所有访问都在单个函数中,请使用具有局部作用域的变量来维护共享内存的生存期。此外,如果所述方法具有不需要访问共享资源的其他语句,则资源本身可以封装在一对{ }中,以确保函数范围内的本地范围。

或者,可以将其另存为指针,并在工作流涉及调用使用共享资源的几种方法的情况下传递给函数。

  1. 将共享资源作为对象(或指针)包装为类的成员变量。根据设计的不同,可以创建所述类以仅用于管理共享内存,也可以使用资源的现有类来占有所有权。

答案 1 :(得分:1)

为简洁起见,许多示例在main函数中都有managed_shared_memory。

但是,您应该使其成为相关类的成员(负责管理共享内存映射的生命周期)。

当然,您可以将它保存为main中的局部变量,但是您必须在任何函数调用中继续传递它。 (我 NOT 建议把它变成一个全局变量。或者就此而言是单身人士。)