2013-04-20 16 views
6

的我發現自己經常寫互斥代碼以同步讀取一個std :: unordered_map和其他容器/寫入權限,以便爲我做的java.util.concurrent我可以使用它們容器。我正要開始編寫一個封裝器來封裝互斥鎖,但我寧願使用一個經過良好測試的庫,這樣我就不會堵塞線程。C++ 11相同的java.util.ConcurrentHashMap

有沒有這樣的圖書館?

+1

facebook愚蠢,它提供了一個AtomicHashMap。 https://github.com/facebook/folly?source=cr – inf 2013-04-20 10:06:16

+0

嗯,它有一個更好的互動類在地圖上,並保護讀寫共享互斥而不是包裹地圖。 – balki 2013-04-20 11:36:50

+0

Facebook愚蠢不允許你刪除地圖元素/免費內存 – easytiger 2013-11-05 18:35:08

回答

4

英特爾產生一個名爲Threading Building Blocks有兩個這樣的事情庫:concurrent_hash_map和concurrent_unordered_map。他們有略微不同characteristics,但其中一個或另一個可能會滿足您的需求。

+3

謝謝,這看起來不錯。不幸的是,它是GPL,與我正在開發的商業項目不兼容。 – 2013-04-21 09:10:53

+0

這並非如此 - 請查看http://threadingbuildingblocks.org/faq/10 - TBB是雙重許可的,因此如果您需要或希望獲得商業許可而非GPL,則可以使用。我強烈推薦它。 – 2013-04-21 11:01:55

+0

他們不完全一樣。不像Java那樣,TBB映射不支持併發擦除。 – easytiger 2013-10-31 19:03:21

1

Folly有一個AtomicHashmap的實現。主要限制是您只能使用int32int64密鑰。檢查文檔here(特別是限制部分)