lock-free

    2熱度

    1回答

    AFAIK萊斯利蘭波特已經指出: ...好像所有的處理器的操作。在一些連續的順序被執行的任何執行的結果是相同的,並且每個單獨的處理器的操作的出現按照其程序指定的的順序排列。 來自:Leslie Lamport,「如何使正確執行多進程程序的多處理器計算機」,IEEE Trans。 COMPUT。 C-28,9(1979年9月),690-691。 所以,我不知道這是否亂序調度後意味着高級語言程序,如C

    2熱度

    3回答

    當使用calloc時,指向新分配的內存的指針至少與最低有效位的certian數對齊,意味着最不重要的位(作爲標記的指針)可用於鎖定 - 免費算法,實際上通常用於這些算法的情況。我正在測試linux ubuntu服務器(x86_64 GNU/Linux,3.10.23-xxxx-std-ipv6-64-vps)上的內存管理功能,並且從我的實驗看來,4個最低有效位設置爲0。我讀過的內容指出,指針對齊是

    6熱度

    2回答

    我在閱讀安東尼威廉姆斯的C++ Concurrency in Action,並且不瞭解其執行lock_free_stack類的push類。 爲什麼地球上原子load不在while循環中?他給出的理由是: 因此,您不必每次都通過循環, 重新加載頭,因爲編譯器會爲您做到這一點。 但我不明白。有人可以對此有所瞭解嗎? template<typename T> class lock_free_stack

    3熱度

    1回答

    我有一個基於循環緩衝區的無鎖多生成器,單消費者隊列。到目前爲止,它只有非阻塞push_back()和pop_front()調用。現在我想添加這些調用的阻止版本,但是我想盡量減少這對使用非阻塞版本的代碼的性能造成的影響 - 即它不應將它們變成「鎖定默認」調用。 E.g.阻塞的push_back()的最簡單的版本是這樣的: void push_back_Blocking(const T& pkg) {

    -2熱度

    1回答

    中實現的正向無鎖列表我需要無鎖數據結構來確認某些標準:快速,低內存消耗,易於實現,有序。一直在尋找,並找到數據結構,如單鏈表,雙鏈表,跳過列表,但沒有一個符合我所有的標準。在我看來,轉發名單將滿足這些標準。但我不知道任何現有的實現。 在C for Linux中是否有任何生產就緒的轉發鎖定列表實現?

    9熱度

    1回答

    考慮下面的代碼: struct payload { std::atomic<int> value; }; std::atomic< payload* > pointer(nullptr); void thread_a() { payload* p = new payload(); p->value.store(10, std::memory_order_

    0熱度

    3回答

    編輯: 我現在已經完成了我的隊列(以下克服所描述的問題,等等)。對於那些感興趣的人可以找到here。我很樂意聽到任何評論:)。請注意,隊列不僅僅是一個工作項目隊列,而是一個模板容器,當然可以通過工作項目來實例化。 原文: 在C++ 11和14上併發看Herb Sutter's talk後,我得到了所有興奮非阻塞併發。 但是,我還沒有找到解決方案,我認爲是一個基本問題。所以,如果這已經在這裏,請與我

    -2熱度

    2回答

    CAS是非常原始的無鎖技術,我知道它是原子的。 而且,它比INC更復雜的操作。 應該比較值,如果值沒有改變,CAS設置新的價值,同時保證其他線程不會訪問它。 那麼,CAS如何可以是原子,而INC不是。 我還了解到,LOCK INC是原子操作,但比昂貴INC成本。 如果CAS也使用像LOCK INC一些類似的技術在內部,那麼爲什麼叫無鎖技術? CAS中使用的鎖是否與我們通常所知的正常鎖不同? 如果是

    1熱度

    1回答

    對於無鎖包,以下C++ 11編碼算法中NQFENCE和DQFENCE內存屏障的最佳設置是什麼? 描述:這個算法是一個(否則)接近最佳的多生產者多消費者無鎖隊列,用於提供帶有非空指針的線程池。它的正確性顯而易見(模塊錯誤!)。這是不可線性化的,也就是說,由單個線程排隊的數據可能無序排列,因此它不適合單個消費者隊列(或消費者不是獨立的環境)。 (至少對我來說!)似乎幾乎是最佳的(一般)(無論如何)。它

    1熱度

    1回答

    我正在尋找在C++中無鎖數據結構來替換以下: pthread_mutex_lock(plock); set.insert(element); pthread_mutex_unlock(plock); 此組應該最多O(logN)的複雜性支持.insert()和.size()用,有一個迭代器,並應該能夠通過自定義比較器保持其順序。基本上和Java中的ConcurrentSkipListSet一