lock-free

    4熱度

    3回答

    我的問題涉及到多線程無鎖同步。我想知道以下內容: 什麼是實現此目的的一般方法?我讀了一些關於LockFreePrimitives的地方,比如CompareAndExchange(CAS)或DoubleCompareAndExchange(DCA),但沒有給出這些解釋嗎?任何最小化使用鎖的方法? Java/.NET如何實現其併發容器?他們使用鎖還是無鎖同步? 在此先感謝。

    0熱度

    1回答

    是否有人知道支持排序操作(即找到第k個元素)的任何無鎖定跳過列表實現和/或研究論文?或者,是否有人知道這種手術無法奏效的根本原因? 加分點: 不承擔垃圾收集的執行力度。我的經驗已經有不少研究論文忽略了內存管理。 支持: 有關如何軍銜操作可以在常規skiplist進行了描述:「一個跳躍列表食譜」由威廉·皮尤 爲了更好的無鎖skiplist之一描述:「實用鎖定自由」的凱爾·弗雷澤 一個更好的無鎖ski

    0熱度

    2回答

    存在大量關於無鎖雙向鏈接列表的研究。同樣,在無鎖跳過列表上也有大量的研究報告。然而,盡我所知,沒有人管理一個無鎖的雙重鏈接跳過列表。有沒有人知道任何相反的研究,或者爲什麼會出現這種情況? 編輯: 具體的場景是建立一個快速分位數(50%,75%等)累加器。將樣本插入到O(log n)時間的跳過列表中。通過維護當前分位數的迭代器,我們可以將插入值與O(1)時間內的當前分位數進行比較,並可以輕鬆確定插入

    4熱度

    1回答

    我試圖使用boost鎖定庫。但是,當我將模板參數設置爲用戶定義類型時,出現錯誤invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’。 有什麼可以解決的嗎? typedef struct TMsgBuffer { char m_puBuffer[51

    9熱度

    2回答

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

    4熱度

    2回答

    短版: 我試圖取代的std ::從一個無鎖,單曲製作,從here單個消費者隊列實現使用C++ 11的原子。我該如何替換boost::atomic? 龍版本: 我試圖得到一個更好的表現出我們的應用程序與工作線程。每個線程都有自己的任務隊列。我們必須在出列/排隊每個任務之前使用鎖進行同步。 然後我找到了Herb Sutter關於無鎖隊列的文章。這似乎是一個理想的替代品。但代碼使用C++ 11中的std

    0熱度

    1回答

    似乎fetch_add是win(請參閱後的評論以及)支持這兩個CPU的CAS循環。 切換清除位以設置位時,可以使用按位或加法操作。結果將是相同的。我預計每個人的表現都是平等的。因此,決定使用哪種操作將取決於操作的硬件支持差異(如果有的話,我沒有提供任何有關處理器支持的信息)。 是否有任何理由相對於其他在這種情況下?

    4熱度

    2回答

    我有一雙無符號INT32的 std::atomic<u32> _start; std::atomic<u32> _end; 有時候我想設置啓動或比較交換端,所以我不希望可以通過對整個64位對使用CAS造成的虛假故障。我只想使用32位CAS。 _end.compare_exchange_strong(old_end, new_end); 現在我可以同時獲取一個原子64位讀取的開始和結束。或

    25熱度

    4回答

    我讀得越多,我就變得越困惑...我會認爲找到一個在C++中實現的正式正確的mpsc隊列是微不足道的。 每當我找到另一個刺它,進一步研究似乎表明有如ABA或其他微妙的競爭條件的問題。 很多人都在談論垃圾收集的必要性。這是我想避免的。 有沒有一個公認的正確的開放源代碼實現了嗎?

    10熱度

    2回答

    我需要以原子方式讀取/寫入16個字節。我只使用cmpxchg16編寫,除了我認爲的一個難以理解的AMD處理器之外,它在所有x64處理器上都可用。 現在的問題是對齊的16字節值,只有使用cmpxchg16(它充當內存屏障)才能修改,是否有可能讀取16位字節的位置,這是半舊的數據和一半的新數據? 只要我用SSE指令讀取(所以線程在讀取過程中不能被中斷),我認爲讀取時看不到不一致的數據是不可能的(即使在