2012-02-21 87 views
9

谷歌對「鎖定免費矢量」的第一個結果是由Damian Dechev,Peter Pirkelbauer和Bjarne Stroustrup描述理論無鎖矢量的研究論文。這個或者其他無鎖矢量是否已經實現?是否有無鎖向量實現?

+0

也許[libcds](http://libcds.sourceforge.net/)? – 2012-02-21 22:12:50

+0

下來的選民可以解釋自己嗎? – qdii 2012-02-21 22:13:13

+0

婉拒投票 – Justicle 2012-02-21 22:14:16

回答

0

MS提供了ppl :: concurrent_vector,Intel提供了tbb :: concurrent_vector。在Windows上,至少ppl和tbb是C運行時的一部分。

+5

*併發*和無鎖是完全不同的東西 – 2012-02-21 22:52:10

+0

你是對的,併發和無鎖是不一樣的。我的印象是concurrent_vector的MS ppl實現是無鎖的。這不是嗎? – Unknown1987 2012-02-22 04:25:15

+0

我傾向於假設,除非另有規定,沒有庫是無鎖的,並且我沒有看到任何參考文獻快速瀏覽文檔,指出ppl :: concurrent_vector是無鎖的。 – 2012-02-22 15:17:46

-4

我剛剛在維基百科中查找了一個矢量。

我認爲(只有一兩分鐘的思考,思想)完全無鎖版本有點問題。

考慮;你創建數組,按常規訪問它,等等。爲此,你不需要無鎖。他們需要調整大小時出現問題。進入並發現這個需要malloc的線程。這是一個真正獨特的操作 - 此時的其他線程必須阻止/旋轉。如果他們試圖幫助,例如做malloc自己,你可以有很多線程發佈malloc。現在可能在實踐中線程的數量是這麼低,這是可以的 - 在這種情況下,你可能有一些線程執行malloc,獲勝者原子地激活新內存,失敗者看到這個然後釋放( )他們的記憶。

然後進行復制,當一個線程來訪問一個元素,那麼,我們就需要不斷的在列表中分配數組的所有軌道,我們訪問它們在列表中,最古老的第一,直到我們找到我們想要的元素,並且如果它不在最近的數組中,我們移動它然後訪問它。

然後,我們還需要一種方法讓線程知道它已經移動了最後一個元素,並且可以釋放該數組,因此我們必須對元素進行計數;所以我們有可能無限分配要求的風險。更重要的是,數據結構(我已經說了一個列表,但它可能是其他的東西,雖然它們不會那麼好,但是需要是原子的)(因爲線程可能會同時刪除一個數組)直到最近,無鎖數據結構的頂峯一直處於複雜狀態,需要SMR以及複雜的實現。

(我說的直到最近 - 最近有人發明了一種無鎖紅黑樹,整個事情,添加和刪除!)

TBH,我不明白爲什麼有人會用向量。爲什麼不使用平衡二叉樹或散列?

+0

http://www.linuxsoftware.co.nz/containerchoice.png – 2012-07-23 01:22:39