我在共享内存中有一个多索引。
我需要将多索引的内容转储到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 中没有输出可能是因为它在共享内存中。
最佳答案
写入文件是一项缓慢的工作,如果您使用的是 iostream,则更是如此。您可以在互斥体中将您感兴趣的内容复制到辅助 vector 中:
std::vector<uint64_t> IMSIs;
IMSIs.reserve(hash->size());
for(const auto& v: hash->get<My_TIMESTAMP_tag>()) IMSIs.push_back(v.IMSI);
并处理 vector 以在互斥锁外打印。
关于c++ - 共享内存中的多索引拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49717300/