我在共享内存中有一个多索引。
我需要将多索引的内容转储到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中没有输出,可能是因为它在共享内存中。
答案 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);
以及在互斥锁之外打印矢量的过程。