【问题标题】:tbb concurent_hash_map in shared memory共享内存中的 tbb concurent_hash_map
【发布时间】:2014-03-19 12:41:16
【问题描述】:

我正在使用共享内存在进程之间传递数据。
它们使用精确的内存映射,因此它们可以使用相同的虚拟地址。

我想通过共享内存在进程之间使用 tbb 并发哈希映射
我认为我需要使用可扩展的分配器并使其使用共享内存,如何购买?
我将只使用简单类型(int、float、固定数组大小)而不使用指针。

我在 linux 上工作,在 c++ 中,如果需要,我可以使用 boost。

【问题讨论】:

    标签: c++ ipc shared-memory tbb


    【解决方案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()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2011-12-04
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多