我一直在閱讀關於非阻塞算法的隨機鏈接,並將其用於併發編程。是否有任何有用的庫在C/C++中使用非阻塞算法,以及哪些類型的並行數據結構最有利於使用非阻塞算法?謝謝。是否爲真正的非阻塞併發編程?
2
A
回答
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上寫它。
相關問題
- 1. Java中的非阻塞CAS是否真的非阻塞?
- 2. 是否是Task.Delay非阻塞?
- 3. 是renderer.render()阻塞還是非阻塞?
- 4. '異步','非阻塞'和'併發'是否意味着彼此?
- 5. 我的(初學者)對阻塞和非阻塞io的理解是否正確?
- 6. 使用非阻塞的SocketChannel,是否阻塞了Socket?
- 7. 將線程阻塞轉換爲f中的非線程阻塞#
- 8. java.io.BufferedReader.readLine()是非阻塞
- 9. 非阻塞線程
- 10. 非阻塞併發wsgi服務器
- 11. linq是否阻塞線程?
- 12. mpi:阻塞與非阻塞
- 13. 是否有非阻塞emgu ImageViewer調用?
- 14. 編寫PHP非阻塞應用程序
- 15. 非阻塞式TCP套接字編程
- 16. 非阻塞I/O是否比多線程阻塞I/O更快?怎麼樣?
- 17. 異步在瀏覽器中是否真正無阻塞?
- 18. 使WebSocket發送非阻塞
- 19. 如何發送非阻塞
- 20. 阻塞的線程是否會導致進程阻塞?爲什麼和如何?
- 21. 發揮框架,承諾,非阻塞線程編程
- 22. Spring mvc發送郵件爲非阻塞
- 23. 網絡阻塞到非阻塞,只有線程作爲選項?
- 24. 我對節點中'非阻塞'的理解是否正確?
- 25. ESI是否阻塞或不阻塞?
- 26. 下面的node.js代碼是阻塞的還是非阻塞的?
- 27. http.ServerResponse.write()是否阻塞?
- 28. 是C阻塞還是非阻塞的write()函數?
- 29. 帶延遲的阻塞/非阻塞
- 30. 是PHP蜱非阻塞
@DeadGMG謝謝你的迴應。我想你正在談論像英特爾處理器一部分的CMPXCHG指令嗎? – Fanatic23 2010-11-09 15:36:27
+1爲TANSTAAFL。 :) – 2010-11-09 15:38:52
@Fanatic:你也必須明確地理解他們是如何工作的。 – Puppy 2010-11-09 15:59:44