c++ - 共享内存中的多索引拷贝

标签 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 中没有输出可能是因为它在共享内存中。

最佳答案

写入文件是一项缓慢的工作,如果您使用的是 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/

相关文章:

c++ - 如何将 cv::Scalar 分配给 cv::Mat?

c++ - 我怎样才能在C++中反转十六进制的顺序

c++ - 如何在 multi_index_container 中添加指定的有序唯一索引

c++ - std::hash 用于 std::chrono::duration

scheduled-tasks - 在多个实例上访问 Quartz 中的计划作业

c++ - boost 托管共享内存段错误

python - 在 Celery - Python 中的进程(工作人员)之间共享数据的最佳解决方案是什么?

c++ - 绕过 Boost Multi-Index 容器的常量元素

c++ - 带 map 的 Boost::multi_index

c++ - 如何告诉 netbeans 关于 pthread_barrier_t 的信息