lock-free

    3熱度

    2回答

    我想知道std :: call_once鎖是否可用。 There是使用互斥鎖的call_once實現。但爲什麼我們應該使用互斥鎖?我試圖用atomic_bool和CAS操作編寫簡單的實現。代碼線程安全嗎? #include <iostream> #include <thread> #include <atomic> #include <unistd.h> using namespace

    0熱度

    1回答

    Microsoft Visual C++ 2015中STL的當前實現似乎由於構造函數中的互斥等待而禁止任何無鎖環境啓動線程。 void _Launch(_Thrd_t *_Thr) { // launch a thread _Thrd_startX(_Thr, _Call_func, this); while (!_Started) _Cnd_waitX(

    5熱度

    1回答

    我正在學習邁克爾& Scott的無鎖隊列算法並試圖用C++實現它。 但是我在我的代碼中產生了一場比賽,並認爲可能會出現算法競賽。 我這裏看報紙: Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms 和原始出隊的僞代碼如下: dequeue(Q: pointer to queue_t, p

    0熱度

    1回答

    這是A. Williams C++ Concurrency in Action一書中的帶有危險指針主題的無鎖棧。假設我得到它的一個理解,除了只有兩行,在這裏,他們是(在這裏source): // code before if (old_head) { res.swap(old_head->data); // code after 的問題是:可以在另一個線程刪除(修改等)「old_head

    0熱度

    1回答

    我在練習冊併發調查ABA問題,維基百科和我已閱讀下列post 據我瞭解ABA問題的根本原因是,在algoritm我們檢查狀態同樣如前,但算法意味着狀態未觸及。 實施例與堆棧: 添加元素堆棧,我們使用下列algoritm: create new stack node(save to `newNode` variable) while(true) { oldHead = stack.ge

    1熱度

    1回答

    在this file中,boost::lockfree::detail::freelist類用於使用free list來管理用於無鎖數據結構(例如,隊列)的存儲。 deallocate_impl方法用於通過將節點鏈接回空閒列表來釋放節點(釋放節點成爲空閒列表的新頭部,替換舊頭部)。該方法應該是線程安全的並且無鎖定的。一個實例的原始源代碼在這裏重複我的意見註釋指出可疑代碼(潛在的bug?): voi

    0熱度

    1回答

    我最近寫了一個有界的無鎖隊列,並正在爲它做一些測試。在測試中,一些線程產生素數(通過從某個數字開始,計數生產者線程對數量的6倍,使用Deterministic Miller Rabin測試檢查每個數字,並將素數插入到隊列中)以及一些線程消耗素數(通過刪除隊列中的元素並檢查它們是否爲素數)。生產者線程與每對中的一個配對產生等於1模6的素數,而另一個產生等於5模6的素數(所有等於0,2,3或4模6的數

    0熱度

    1回答

    我的問題很簡單。 爲什麼聯鎖 - 多線程中的遞增比單線程慢? 僅僅是因爲Cache line bouncing(Cache line contention)? 還是有其他原因? 我使用的是英特爾i7,visual studio 2012.我使用互鎖增量功能測試了計數。並且測試結果是那。 1主題 - 610385971 2主題 - 497804468 3主題 - 351516659 4線程 - 33

    1熱度

    1回答

    我有一個使用ah線程池來處理其所有作業的驗證類。 現在,當用戶詢問時,我開始一個線程,通過從磁盤讀取來爲我的驗證類提供作業。我相信在某一點上閱讀會比處理快。所以我想編寫一個方法,如果有超過1000個作業正在處理,允許此線程等待。 我已經引入了一個原子,它在添加作業時增加,在完成時減少。 我嘗試添加一個方法一直不太好。而且我知道一定可以使用更好的東西。 void Validator::waitUnt

    2熱度

    1回答

    假設我有C++中的結構和類: struct Vec { double x; double y; double z; } class VecTracker { Vec latest_vec; std::atomic<double> highest_x; std::atomic<double> highest_y; std::