2014-03-19 45 views
0

我使用共享內存在進程之間傳遞數據。
他們使用精確的內存映射,所以他們可以使用相同的虛擬地址。
共享內存中的tbb concurent_hash_map

我想通過共享內存在進程之間使用tbb concurent散列圖
我想我需要使用可擴展的分配器並使其使用共享內存,購買方式如何?
我將只使用簡單的類型(int,float,fixed數組大小)沒有指針。

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

回答

3

通常,C++容器可以通過分配器類型進行專門化,該類型將覆蓋用於分配元素和內部結構的默認分配器。 要在IPC shmem區域中使用容器,它必須完全在給定區域內分配。 不幸的是,tbb :: concurrent_hash_map的當前實現直接分配了一些內部結構,繞過了用戶指定的分配器。

因此,暫時不可能在shmem區域內使用tbb :: concurrent_hash_map(儘管可能對其代碼進行很少的修改)。

對於可擴展的分配器,它可以用於使用「Scalable Memory Pools」社區預覽功能在給定區域分配內存,但它不能用這種方式替換標準分配器。

+0

感謝@Anton,請確切地告訴你「tbb :: concurrent_hash_map的當前實現直接分配一些內部結構,繞過用戶指定的分配器」 – davidbobo

+0

@davidbobo,請搜索'cache_aligned_allocator',它用於方法enable_segment()和clear() – Anton