Внутри boost::interprocess::managed_shared_memory
я пытаюсь создать boost::unordered_map
внутри другого boost::unordered_map
в качестве значения, имея ключ как std::string
для обеих карт. К этой карте на карте внутри сегмента общей памяти обращаются два разных процесса, извлекающих значения как из внешней, так и из внутренней карты.
Ниже представлена моя реализация и вы хотите знать, возможно ли это / правильно или возможно лучше?
boost::interprocess::managed_shared_memory segment(boost::interprocess::open_or_create, "BOOST_SHM", 65536);
typedef std::string KeyType;
typedef std::string ValueType;
typedef std::pair<const KeyType, ValueType> MapType;
typedef boost::interprocess::allocator<MapType, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
typedef boost::unordered_map<KeyType, ValueType, boost::hash<KeyType>, std::equal_to<KeyType>, ShmemAllocator> InMap;
ShmemAllocator alloc_inst(segment.get_segment_manager());
InMap *inside_map = segment.construct<InMap>("SHM_IN_MAP")(3, boost::hash<KeyType>(), std::equal_to<KeyType>(), alloc_inst);
typedef std::pair<const KeyType, MapType> MIMType;
typedef boost::interprocess::allocator<MIMType, boost::interprocess::managed_shared_memory::segment_manager> MIMShmemAllocator;
typedef boost::unordered_map<KeyType, MapType, boost::hash<KeyType>, std::equal_to<KeyType>, MIMShmemAllocator> OutMap;
//MIMShmemAllocator alloc_inst(segment.get_segment_manager()); /*Commented due to Error*/
OutMap *outside_map = segment.construct<OutMap>("SHM_OUT_MAP")(3, boost::hash<KeyType>(), std::equal_to<KeyType>(), alloc_inst);
Прочие сведения:
gcc версии 4.8.3 20140911 (Red Hat 4.8.3-9) (GCC) на CentOS 7, BOOST_LIB_VERSION "1_58"