2010-11-09 50 views
2

我一直在閱讀關於非阻塞算法的隨機鏈接,並將其用於併發編程。是否有任何有用的庫在C/C++中使用非阻塞算法,以及哪些類型的並行數據結構最有利於使用非阻塞算法?謝謝。是否爲真正的非阻塞併發編程?

回答

1

boost::thread在Windows上使用shared_mutex的比較和交換語義 - 只有在發生爭用時纔會使用信號量進行阻塞調用。

Windows本身支持通過InitializeCriticalSectionAndSpinCount在臨界區上使用旋轉計數來嘗試優化MP系統上高爭用鎖的位。

微軟真的獲得了線程性能的信仰,託管代碼和本地代碼現在都有slimline reader-writer locks

這也給了我另一個機會來插入一本我一直在等待的書,因爲它有一個關於這個主題的章節:C++ Concurrency in Action

4

有沒有這樣的事情作爲一個自由鎖。所有多線程算法都使用同步。您可以獲得無鎖算法,該算法不使用顯式鎖定,但依賴於原子操作和其他此類「非鎖定」,但實際情況是您必須是非常優秀的程序員 - 並且知道您的目標平臺和實現細節目標CPU - 以編寫這樣的算法。我所知道的唯一無鎖算法實際上是針對360的,由微軟工程師編寫,他們必須獲得設計文檔,瞭解360如何實現鎖定的CPU,然後才能成功。

C++無鎖算法將應用於太多的CPU來完成這樣的工作 - 你不能只在boost :: thread上寫它。

+0

@DeadGMG謝謝你的迴應。我想你正在談論像英特爾處理器一部分的CMPXCHG指令嗎? – Fanatic23 2010-11-09 15:36:27

+0

+1爲TANSTAAFL。 :) – 2010-11-09 15:38:52

+0

@Fanatic:你也必須明確地理解他們是如何工作的。 – Puppy 2010-11-09 15:59:44