2010-05-15 66 views
6

可能重複併發容器庫:
Is there a production ready lock-free queue or hash implementation in C++是否有C++

我在尋找無鎖容器的實現:

  • 隊列
  • 堆棧
  • 哈希映射
  • 等...

如何阻止容器:

  • 阻塞隊列
  • 阻止堆棧

是否有良好的圖書館了嗎?我想不寫這些數據結構......我更願意使用經過社區測試的東西。

+1

如果你使用「阻塞」這個詞,它不是無鎖的... – 2010-05-15 17:51:51

+0

@Evan,我糾正了我的問題,但應該有一種方法可以使用CAS和類似的方法創建一個無鎖的阻塞隊列C++相當於ManualResetEvent ... – Kiril 2010-05-15 18:41:37

+0

@Link:CAS不能用於實現阻塞。最好的情況是,你可以使用自旋鎖(這對於這種類型來說會很糟糕),但是你需要調度器(互斥體/信號量/等)的幫助來實際阻止。 – 2010-05-15 18:46:51

回答

4

查看Intel TBB的容器類。參考表示:

的容器類允許多個 線程同時調用 相同的容器上的某些方法。

3

赫伯特薩特在杜博士博士雜誌的有效併發系列中做了幾篇文章。你可能會想馬上閱讀的兩篇文章:

rest of the series絕對是值得一讀爲好。

+0

謝謝......我知道有些文章描述瞭如何編寫這些容器,但我更願意使用經過驗證的測試庫,而不是自己編寫容器。 – Kiril 2010-05-15 19:08:25

+0

@Lirik:我和他們聯繫的主要原因是Herb對它的工作原理和工作原理進行了非常深入的討論,以及在寫作時存在哪些缺陷。他還有完整的工作示例,我已經複製併成功逐字使用。 (儘管他們期望C++ 0x兼容編譯器或等價的'atomic <>'類型)。 – greyfade 2010-05-16 00:42:44