我创建了一个Boost共享内存,用于共享矢量。
分享已经完成。
但是,我不明白向量是如何被推入共享内存的。
我从写入过程中对共享内存执行push_back
。那么向量是否像堆栈push
一样被推送到共享内存中,采用LIFO顺序?
另一个应用程序,读者,以下列方式检索向量:
managed_shared_nmemory segment (open_only, "Shared_mem_name");
Vector = segment.find<VECTOR_TYPE>("Vector_name").first;
if (Vector != NULL)
{
//CODDE
}
现在,我正在读哪个载体。推到最后一个(最新的一个)?如果我正在阅读它,它是否意味着矢量被弹出?即读取后它是否仍然存在于共享存储器中,如果是这样,共享存储器会在一段时间后溢出,我将如何阻止它?我在文档中没有看到任何关于它的内容......
答案 0 :(得分:1)
向量不会“推入”共享内存。没有隐式堆栈。
相反,矢量 在共享内存中存在 。您正在阅读的内容实际上与另一个过程中的矢量相同,同时。
请注意,这强烈暗示您需要共享互斥锁来同步访问权限,否则您将在线程之间(来自不同进程)进行数据争用,根据定义,这在C ++中为Undefined Behaviour。
略有不同的角度:
我从写入过程中对共享内存执行
push_back
。那么向量是按照LIFO顺序像堆栈一样推入共享内存吗?
打破它:
我对共享内存
进行了push_back
不,不。您push
向量元素back
的一个向量。此向量是您共享的单个内容,名称为"Vector_name"
因此正在推送载体
不,你的矢量保持原样:在共享内存中。
像堆叠一样推入共享内存,以LIFO顺序?
不,只有一个向量。向量本身是有序的顺序容器。它支持随机访问,所以
for (auto it = v.begin(); it!= v.end(); ++it)
{ // process `*it` in order
}
VS
for (auto it = v.rbegin(); it!= v.rend(); ++it)
{ // process `*it` in reversed order
}
如果您总是使用push_back
进行插入,则in order
迭代就像“FIFO”