簡體   English   中英

如何將 ReentrantReadWriteLock 邏輯轉換為帶障礙的 LMAX Disruptor

[英]How to convert ReentrantReadWriteLock logic to LMAX Disruptor with barriers

我有一個 ArrayList 的共享集合,並且我使用 ReentrantReadWriteLock 鎖來保護來自不同線程的關鍵區域的進入。 我的線程是三個作家,閱讀,刪除線程。 我在每種情況下都獲得了正確的鎖定。 邏輯是我將數據插入 ArrayList,在必要時讀取它們,並且當計時器達到限制時刪除一些條目。 過程順利進行,一切都很完美。

我現在的問題是我能否以某種方式轉移上述邏輯並使用 LMAX 中斷器來實現它,以避免鎖定開銷並提高性能。 如果是的話,你能給我描述一個理想的案例嗎?如果你也能發布代碼,我會非常感激。

我假設將在 ringbuffer 中輸入而不是 ArrayList 數據,並且我將有 2 個生產者寫入、刪除和讀取的消費者。 此外,我必須確保我使用生產者障礙。 是否會從鎖定情況下提高性能。 我不確定我是否正確理解了所有內容,請幫助我並給我指示?

如果您的共享狀態是ArrayList並且您有一個線程正在讀取和處理ArrayList中的元素,並且您希望對該共享狀態的更新同步,那么通常ArrayList將由一個處理諸如ProcessWrite等事件的EventHandler擁有, Delete並更新和處理共享狀態。

這將全部在一個線程上運行,但這幾乎就是現在正在發生的事情,因為您不能在寫入/刪除的同時讀取。

由於您只有一個讀取線程,因此使用ReadWriteLock不會有太多好處,因為您永遠不會有並發讀取。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM