【发布时间】:2012-04-22 11:59:36
【问题描述】:
我的问题如下:
为什么我的程序不能重新附加到共享内存映射?
我在我的程序中执行以下操作(使用 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;
我的问题是,如果插入了 2 个项目,则从 find 返回的对象上的 .second 调用将显示“1”,这实际上是错误的,它应该显示 2,之后如果我的程序尝试在存储地图程序崩溃。有没有人已经这样做了。
如果我在初始程序运行中做同样的事情,那么从散列中查找值是没有问题的。这只发生在程序被初始化并且稍后程序重新启动并执行附加并尝试检索以前插入的值时。
感谢您的帮助。
【问题讨论】:
标签: c++ boost map shared-memory