共享内存中的多索引副本

Multi index copy in shared memory

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

我需要将多索引的内容转储到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 return 内存指针。

这里有一个link代码http://coliru.stacked-crooked.com/a/09ea79752512fad8

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

写入文件是一项缓慢的工作,如果您使用的是 iostream,则更是如此。您可以在互斥体中将您感兴趣的内容复制到辅助向量中:

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

并处理向量以在互斥锁外打印。