lock-free

    8熱度

    1回答

    我在jsr166中讀取FutureTask類,發現結果對象是非易失性的,代碼中的註釋是「非易失性的,受狀態讀/寫保護」第75行,狀態是volatile int。我已經從Java Language Spec閱讀Java內存模型,但沒有找到準確的答案。有人知道原因嗎?

    8熱度

    2回答

    我尋找在C語言的環形緩衝器實現(或僞代碼)具有以下特徵: 多個生產者單個消費者圖案(MPSC) 消費者塊對空 生產者阻斷全 無鎖(我期望高爭) 到目前爲止我我一直只使用SPSC緩衝區 - 每個生產者一個 - 但我想避免消費者連續旋轉以檢查所有輸入緩衝區上的新數據(也許是爲了擺脫我係統中的一些編組線程)。 我在英特爾機器上爲Linux開發。

    5熱度

    3回答

    我讀過的博客,但我不知道他的結論是否正確: http://www.javacodegeeks.com/2010/09/java-best-practices-queue-battle-and.html#ixzz1seaiSLwp 他說:你可以從所提供的性能看結果的LinkedBlockingQueue取得的最好組合(增加和消除元素)的表現結果,並且應該是您實施生產者 - 消費者schenarios

    4熱度

    1回答

    我想使用lock-free algorithm作爲共享內存以避免互斥。我有一些共享數據共享內存的進程。如果進程正在鎖定互斥鎖和崩潰,則所有其他進程也會崩潰。 我看了一些用鏈表實現無鎖算法的論文。但是在我的共享內存中,我無法定義在這塊內存上使用數據結構。我只是一個指向這個塊的指針。 所以我沒有任何想法適用於無鎖算法在我的情況。我需要你的幫助。如果我的英語非常糟糕,謝謝並抱歉。

    2熱度

    2回答

    我有一堆線程與一堆計數器。線程遞減計數器,並且如果計數器達到零,有趣的事情發生。這對使用原子操作來實現是微不足道的。 然而,就更困難了,如果我們需要兩個屬性,無論線程或專櫃的數量的持有: 可擴展性:遞減計數器是O(polylog)。 緊湊性:每個計數器的內存爲O(1)。 我知道如何獨立執行其中任何一個:簡單的實現是緊湊的,分層計數網絡[4]是可擴展的)。可以做到兩者嗎?注意:由於O(n)線程不能使

    0熱度

    3回答

    public class MyConfigurationData { public double[] Data1 { get; set; } public double[] Data2 { get; set; } } public class MyClass { private static object SyncObject = new object();

    4熱度

    3回答

    我在閱讀Anthony Williams的C++ Concurrency in Action。目前我在他desribes memory_order_consume點。 該塊之後有: 現在,我已經覆蓋了內存排序的基礎,它的時間來看看 更復雜的部件 這讓我害怕一點點因爲我沒有完全理解幾件事情: 如何依賴性排序之前不同步與同步?他們都創造了發生之前的關係。什麼是確切的區別? 我感到困惑下面的例子: in

    0熱度

    1回答

    我正在開發的網絡產品後端,是爲客戶提供服務(N = 10-100)的一打。每個連接需要2個週期性任務,心跳和通過SSH下載遙測,每個都在H赫茲。還有來自前端的不同類型的額外事件。根據每個任務的性質,在每個連接的套接字上調用select等待的一個穩定部分,這允許OS在線程之間切換以經常在等待響應時服務於其他客戶端。 在我最初的實現中,我爲每個連接(心跳,遙測,額外)創建了3個線程,每個線程都等待一個

    0熱度

    1回答

    我正在試驗liblfds庫(http://www.liblfds.org/)中的無鎖結構,着眼於在工具鏈中使用它們,該工具鏈還包含用於各種錯誤檢查的valgrind,這會導致我一些麻煩。我建庫的調試版本,並用它來編譯下面的程序:在命令行中執行時 #include <liblfds.h> #include <stdio.h> #include <pthread.h> static void

    1熱度

    2回答

    我有一些線程來寫資源和一些讀取它。但pthread_rwlock導致大量的上下文切換。所以我想象一種避免它的方法。但我不確定它是否安全。 這是代碼: sig_atomic_t slot = 0; struct resource { sig_atomic_t in_use; /*Counter,if in_use, not zero*/ ..... } xxx[2];