共享内存中的 tbb concurent_hash_map
Posted
技术标签:
【中文标题】共享内存中的 tbb concurent_hash_map【英文标题】:tbb concurent_hash_map in shared memory 【发布时间】:2014-03-19 12:41:16 【问题描述】:我正在使用共享内存在进程之间传递数据。 它们使用精确的内存映射,因此它们可以使用相同的虚拟地址。
我想通过共享内存在进程之间使用 tbb 并发哈希映射 我认为我需要使用可扩展的分配器并使其使用共享内存,如何购买? 我将只使用简单类型(int、float、固定数组大小)而不使用指针。
我在 linux 上工作,在 c++ 中,如果需要,我可以使用 boost。
【问题讨论】:
【参考方案1】:通常,C++ 容器可以通过分配器类型进行专门化,该分配器类型将覆盖用于分配元素和内部结构的默认分配器。 要在 IPC shmem 区域中使用容器,它必须完全分配在该给定区域内。 不幸的是,当前 tbb::concurrent_hash_map 的实现直接分配了一些内部结构,绕过了用户指定的分配器。
因此,目前无法在 shmem 区域内使用 tbb::concurrent_hash_map(不过,只需对其代码进行少量修改即可)。
对于可扩展分配器,它可以使用“Scalable Memory Pools”社区预览功能在给定区域分配内存,但不能以这种方式替代标准分配器。
【讨论】:
感谢@Anton,请准确说明您在哪里看到“tbb::concurrent_hash_map 的当前实现直接分配一些内部结构,绕过用户指定的分配器” @davidbobo,请搜索'cache_aligned_allocator',它用于方法enable_segment()和clear()以上是关于共享内存中的 tbb concurent_hash_map的主要内容,如果未能解决你的问题,请参考以下文章