提升共享内存映射重新附加功能

时间:2012-04-22 11:59:36

标签: c++ boost map shared-memory

我的问题如下:

为什么我的程序不能重新附加到共享内存映射?

我在我的程序中执行以下操作(可能更容易使用boost页面中的示例,而这只是我程序中的一小部分):

第一次,初始化它:

m_sharedMemory = new managed_shared_memory(create_only, segmentName.c_str() , 1000000);
m_hashMap = m_sharedMemory->construct<MyHashMap>(segmentName.c_str())( 3, boost::hash<std::string>(), std::equal_to<std::string>() , m_sharedMemory->get_allocator<ValueType>());

第二次“重新加入”

m_sharedMemory = new managed_shared_memory(open_only, segmentName.c_str());
m_hashMap = m_sharedMemory->find<MyHashMap>(segmentName.c_str()).first;

我的问题是,如果插入了两个项目,则对来自find的返回对象的.second调用将显示“1”,这实际上是错误的,它应该显示2,之后如果我的程序试图找到任何内容存储地图程序崩溃。有人已经这样做了。

如果我在初始程序运行中做同样的事情,从散列中查找值是没有问题的。只有在程序初始化并且稍后重新启动程序并执行附加并尝试检索以前插入的值时,才会出现这种情况。

感谢您的帮助。

Boost Quick Ref Map Example

1 个答案:

答案 0 :(得分:0)

当我与这个图书馆的“制造者”交谈时,他告诉我,只有在同一过程中才能使用地图。