假设我有一个父进程p1
及其子进程p2
。 p1
创建p2
并让p
2执行某些操作,然后将结果存储到std::map
中。现在p1
想要访问地图。
这是进程间通信,我想使用共享内存来做到这一点。 我正在考虑两种解决方案。
p2将映射转储到char数组并将其写入共享内存,然后p1读取共享内存以重建映射。地图的类型是<std::string, double>
,但我不知道如何将其转储到char数组。
在p2中,假设指向共享内存的指针为void *shm
,我可以使用这种方式std::map<std::string, double>* result = (std::map<std::string, double>*)shm
分配地图的内存,然后将元素插入result
吗?在p1中,我可以做同样的事情std::map<std::string, double>* result = (std::map<std::string, double>*)shm
,然后迭代地图。但我不确定这是否正确。
答案 0 :(得分:2)
不久前我问了一个类似的问题:
boost unordered map in shared memory using std::string key
我们没有在共享内存中使用std :: map或boost :: unordered_map,因为它不易维护和调试。我们在boost共享内存中构建自己的哈希表(基本上是共享内存上的一个数组),它工作正常。
在这种情况下,您可以将地图转储到内存中,就像写入二进制文件一样。第二个进程从共享内存中读取它并重建映射。
如果您的密钥不是很长,您可以将映射作为固定大小结构的数组转储到共享内存中,这非常容易编写和读取。
您的第二种方法可能无效。