C++ 从Boost进程间共享内存检索共享向量
为了共享向量,我创建了一个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
推回到共享内存。那么向量被像堆栈一样按后进先出的顺序推入共享内存
另一个应用程序(读取器)以以下方式检索向量:
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
}