2011-03-25 51 views
9

任何人都可以使用C/C++的無鎖內存分配器嗎?C:無鎖內存分配庫

我已經研究了boost和libcds,但我不確定要使用哪個庫。我一直在研究一個「無鎖,無等待,非阻塞,動態完美哈希,可擴展,併發哈希表」。 *是的,我知道這聽起來很自命,但那就是它的名字。無論如何,我正準備開始多線程測試,並且我需要設計添加新節點時設置內存分配的最佳方式。 (並且當我需要分配指針數組時)

那麼有沒有人有任何與鎖定可用內存分配良好的經驗?

+1

不等待意味着無鎖,無鎖意味着非阻塞,而非阻塞意味着併發?有點多餘... – GManNickG 2011-03-25 05:03:46

+0

我知道,但我的研究教授喜歡打所有的按鈕詞。 – 2011-03-25 05:14:00

+3

您錯過了希望列表中的NUMA意識。如果您還想要併發,所有基本的分配器實現在NUMA硬件上都不太合適。 – 2011-03-25 06:10:57

回答

5

漂亮的圖表顯示此實現好:

http://locklessinc.com/

它是開源的GPL 3.0自2011年11月14日:)

+0

他們發佈了性能基準測試代碼,這很好,因爲我想查看一個更好的計時工具,然後是標準time.h – 2011-03-25 05:20:10

+0

@Feldman,您可以從圖表中看到替代方案:來自Google nee的'tcmalloc''jemalloc' ,以及glibc的默認分配器,這些日子非常好。 – 2011-03-25 05:35:16

+2

再次囤積失敗壯觀。我已經看到它已經推薦了很多次,但是每一個基準我都會在前面找到'jemalloc'和'tcmalloc'的地方。 – 2011-03-25 07:37:20

0

爲什麼不嘗試從tbb分配器?不知道它是如何「無鎖」的,雖然我懷疑你會找到一個真正的無鎖分配器*,至少有一個跨線程/內核工作(如tcmalloc

*我試圖實際構建一個幾個月前,但使它無法鎖定有一些缺點,至少從我的角度來看。我不太喜歡TLS競技場的像nedmalloc那樣。我結束了一個混合分配器,只有當一個塊倉是空的時才鎖定。

+0

有一個完全無鎖的Hoard版本。 – 2012-05-15 14:31:43

2

還有streamflow。我自己沒有用過;我在閱讀一些出版物時碰到了它。