共享内存中的多索引副本

时间:2018-04-08 11:22:54

标签: c++ shared-memory boost-multi-index

我在共享内存中有一个多索引。

我需要将多索引的内容转储到csv。

因此,多索引上的每个操作都受到互斥锁的保护。

所以我进行转储的方法是锁定互斥锁,循环遍历特定的列表索引并将条目写入文件。

问题在于需要花费太多时间。有没有办法(并且会更快)复制共享内存内容,释放互斥锁,然后分析复制的内存?如果可能,我没有找到如何复制共享内存内容(因为它不是POD类型)

m_pSegment->find_or_construct<MultiIndexType>("MultiIndex")(
        typename MultiIndexType::ctor_args_list(),
        typename MultiIndexType::allocator_type(m_pSegment->get_segment_manager()));

find_or_construct返回内存指针。

以下是代码http://coliru.stacked-crooked.com/a/09ea79752512fad8

的链接

在coliru中没有输出,可能是因为它在共享内存中。

1 个答案:

答案 0 :(得分:1)

如果你正在使用iostream,写入文件是一件很慢的事情,更是如此。您可以在互斥锁中将您感兴趣的内容复制到辅助矢量:

std::vector<uint64_t> IMSIs;
IMSIs.reserve(hash->size());
for(const auto& v: hash->get<My_TIMESTAMP_tag>()) IMSIs.push_back(v.IMSI);

以及在互斥锁之外打印矢量的过程。