谷歌對「鎖定免費矢量」的第一個結果是由Damian Dechev,Peter Pirkelbauer和Bjarne Stroustrup描述理論無鎖矢量的研究論文。這個或者其他無鎖矢量是否已經實現?是否有無鎖向量實現?
回答
MS提供了ppl :: concurrent_vector,Intel提供了tbb :: concurrent_vector。在Windows上,至少ppl和tbb是C運行時的一部分。
*併發*和無鎖是完全不同的東西 – 2012-02-21 22:52:10
你是對的,併發和無鎖是不一樣的。我的印象是concurrent_vector的MS ppl實現是無鎖的。這不是嗎? – Unknown1987 2012-02-22 04:25:15
我傾向於假設,除非另有規定,沒有庫是無鎖的,並且我沒有看到任何參考文獻快速瀏覽文檔,指出ppl :: concurrent_vector是無鎖的。 – 2012-02-22 15:17:46
我剛剛在維基百科中查找了一個矢量。
我認爲(只有一兩分鐘的思考,思想)完全無鎖版本有點問題。
考慮;你創建數組,按常規訪問它,等等。爲此,你不需要無鎖。他們需要調整大小時出現問題。進入並發現這個需要malloc的線程。這是一個真正獨特的操作 - 此時的其他線程必須阻止/旋轉。如果他們試圖幫助,例如做malloc自己,你可以有很多線程發佈malloc。現在可能在實踐中線程的數量是這麼低,這是可以的 - 在這種情況下,你可能有一些線程執行malloc,獲勝者原子地激活新內存,失敗者看到這個然後釋放( )他們的記憶。
然後進行復制,當一個線程來訪問一個元素,那麼,我們就需要不斷的在列表中分配數組的所有軌道,我們訪問它們在列表中,最古老的第一,直到我們找到我們想要的元素,並且如果它不在最近的數組中,我們移動它然後訪問它。
然後,我們還需要一種方法讓線程知道它已經移動了最後一個元素,並且可以釋放該數組,因此我們必須對元素進行計數;所以我們有可能無限分配要求的風險。更重要的是,數據結構(我已經說了一個列表,但它可能是其他的東西,雖然它們不會那麼好,但是需要是原子的)(因爲線程可能會同時刪除一個數組)直到最近,無鎖數據結構的頂峯一直處於複雜狀態,需要SMR以及複雜的實現。
(我說的直到最近 - 最近有人發明了一種無鎖紅黑樹,整個事情,添加和刪除!)
TBH,我不明白爲什麼有人會用向量。爲什麼不使用平衡二叉樹或散列?
http://www.linuxsoftware.co.nz/containerchoice.png – 2012-07-23 01:22:39
- 1. 是否將ReentrantReadWriteLock實現爲自旋鎖?
- 2. QueueUserWorkItem是否鎖定正確實現?
- 3. 是否有C庫實現張量積?
- 4. 實現沒有信號量的鎖
- 5. 是否有針對ruby的'標準'讀/寫鎖定實現?
- 6. 是否有可能具有實現Eq的類型的異構向量?
- 7. 是否有更現代的CORBA實現?
- 8. condition_variable在無鎖實現中無互斥鎖
- 9. 有向圖實現
- 10. 是否可以向現有實例啓動AWS市場AMI?
- 11. 實現支持向量
- 12. 迭代和遞歸發現是否有向量中的元素
- 13. 樹(向無環圖)實現
- 14. 是否可以在C#中實現作用域鎖定?
- 15. 是否有任何生產質量的JSF 2實現?
- 16. 是否有可能在PHP中延遲變量實現(?)/承認(?)?
- 17. 實現互斥鎖?
- 18. 實現兩級鎖
- 19. 實現一個鎖
- 20. 是否有IDictionary的LRU實現?
- 21. 是否有CSS的LESS的JavaScript實現?
- 22. 是否有任何MVVM庫實現CommandSinkBinding?
- 23. 是否有Delphi數據API實現?
- 24. 是否有通過DbDataReader實現的IQueryable?
- 25. 是否有Redis-rdb-tools的C#實現?
- 26. GPU上是否有MapReduce實現(CUDA)?
- 27. Java中是否有參數樹實現?
- 28. 是否有查找表的std實現?
- 29. 是否有平面文件JDO實現?
- 30. 是否有Porter2 stemmer的java實現
也許[libcds](http://libcds.sourceforge.net/)? – 2012-02-21 22:12:50
下來的選民可以解釋自己嗎? – qdii 2012-02-21 22:13:13
婉拒投票 – Justicle 2012-02-21 22:14:16