[英]How to convert ReentrantReadWriteLock logic to LMAX Disruptor with barriers
我有一個 ArrayList 的共享集合,並且我使用 ReentrantReadWriteLock 鎖來保護來自不同線程的關鍵區域的進入。 我的線程是三個作家,閱讀,刪除線程。 我在每種情況下都獲得了正確的鎖定。 邏輯是我將數據插入 ArrayList,在必要時讀取它們,並且當計時器達到限制時刪除一些條目。 過程順利進行,一切都很完美。
我現在的問題是我能否以某種方式轉移上述邏輯並使用 LMAX 中斷器來實現它,以避免鎖定開銷並提高性能。 如果是的話,你能給我描述一個理想的案例嗎?如果你也能發布代碼,我會非常感激。
我假設將在 ringbuffer 中輸入而不是 ArrayList 數據,並且我將有 2 個生產者寫入、刪除和讀取的消費者。 此外,我必須確保我使用生產者障礙。 是否會從鎖定情況下提高性能。 我不確定我是否正確理解了所有內容,請幫助我並給我指示?
如果您的共享狀態是ArrayList
並且您有一個線程正在讀取和處理ArrayList
中的元素,並且您希望對該共享狀態的更新同步,那么通常ArrayList
將由一個處理諸如Process
、 Write
等事件的EventHandler
擁有, Delete
並更新和處理共享狀態。
這將全部在一個線程上運行,但這幾乎就是現在正在發生的事情,因為您不能在寫入/刪除的同時讀取。
由於您只有一個讀取線程,因此使用ReadWriteLock
不會有太多好處,因為您永遠不會有並發讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.