C++ 从Boost进程间共享内存检索共享向量

C++ 从Boost进程间共享内存检索共享向量,c++,boost,vector,ipc,boost-interprocess,C++,Boost,Vector,Ipc,Boost Interprocess,为了共享向量,我创建了一个Boost共享内存 共享已经完成 然而,我不明白向量是如何被推入共享内存的 我从写入过程中将推回到共享内存。那么向量被像堆栈一样按后进先出的顺序推入共享内存 另一个应用程序(读取器)以以下方式检索向量: managed_shared_nmemory segment (open_only, "Shared_mem_name"); Vector = segment.find<VECTOR_TYPE>("Vector_name").first; if (Vect

为了共享向量,我创建了一个Boost共享内存

共享已经完成

然而,我不明白向量是如何被推入共享内存的

我从写入过程中将
推回到共享内存。那么向量被像堆栈一样按后进先出的顺序推入共享内存

另一个应用程序(读取器)以以下方式检索向量:

managed_shared_nmemory segment (open_only, "Shared_mem_name");
Vector = segment.find<VECTOR_TYPE>("Vector_name").first;

if (Vector != NULL)
{
    //CODDE
}
托管共享内存段(仅开放,“共享内存名”);
Vector=段。首先查找(“Vector_name”);
如果(向量!=NULL)
{
//编码
}
现在,我在读哪个向量。最后推进来的那个(最新的)?如果我在读它,它是否意味着向量被弹出?i、 e.读取后,它是否仍在共享内存中,如果是,共享内存是否会在一段时间后溢出,我将如何停止它?我在文档中没有看到任何与此相关的内容…

向量没有“推”到共享内存中。没有隐式堆栈

相反,向量存在于共享内存中。事实上,你读到的是另一个过程中的向量,在同一时间

<>请注意,这强烈暗示您需要共享互斥体来同步访问,否则您将在线程之间(从不同进程)中获得数据竞争,并且根据定义,这是C++(

)。
从稍微不同的角度:

我从写入过程中将
推回到共享内存。那么向量就像堆栈一样被推入共享内存,按后进先出的顺序

细分:

  • 我将
    推回到共享内存

    不,你没有。您可以
    向量元素推到一个向量的
    后面
    。此向量是您共享的单个内容,名称为
    “vector\u name”

  • 所以向量被推了

    不,你的向量保持在原来的位置:在共享内存中

  • 就像一个堆栈按后进先出的顺序推入共享内存

    不,只有一个向量。向量本身就是一个有序的顺序容器。它支持随机访问,所以

    for (auto it = v.begin(); it!= v.end(); ++it)
    {  // process `*it` in order
    } 
    
    vs

    如果您总是使用
    push_back
    来插入,那么
    按顺序
    迭代就像“FIFO”


检查进程同步是否正确,是否在
VECTOR\u TYPE
中使用IPC分配器。我建议您从文档中的一个示例开始。因此,在本例中,如果我阅读一条记录
Vector=segment.find(“Vector_name”)。首先,我正在读第一本写在上面的书?当共享内存被填满时,会发生什么行为?它是否从第一个开始覆盖?否。一如既往,如果分配器内存不足,您将得到
std::bad_alloc
异常?@user1173240 PS。如果您想要这种行为,请查看boost::circular_buffer,例如,非常感谢。我来看看。
for (auto it = v.rbegin(); it!= v.rend(); ++it)
{  // process `*it` in reversed order
}