2016-01-10 44 views
2

示例代碼...LMAX Disruptor事件中的類字段是否需要變化?從LMAX干擾器 「入門」

public class LongEvent 
{ 
    private long value; 

    public void set(long value) 
    { 
     this.value = value; 
    } 
} 

編號:https://github.com/LMAX-Exchange/disruptor/wiki/Getting-Started

爲什麼不private long value聲明爲volatile

我問,因爲,對於Disruptor模式來說,數據是在線程(生產者 - >消費者)之間共享的。

我的猜測:生產者和消費者線程之間已經存在(至少)一個內存圍欄。

+2

一個合理的猜測,如果Distruptor可以在沒有任何圍欄的情況下實施,這將是有趣的。 –

回答

3

彼得的評論給出了一個很好的線索,事實上,是的,有涉及記憶柵欄。

您可以在Sequence類中看到putOrderedLong()compareAndSet()等等。這些都強制執行內存排序。

有關更多詳細信息,請參閱source code

相關問題