共享内存中的多索引副本
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);
并处理向量以在互斥锁外打印。
我在共享内存中有一个多索引。
我需要将多索引的内容转储到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);
并处理向量以在互斥锁外打印。