2016-01-10 3 views
2

Пример кода из LMAX Disruptor "Начало работы" ...Должны ли поля классов в событии LMAX Disruptor быть неустойчивыми?

public class LongEvent 
{ 
    private long value; 

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

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

Почему не private long value объявлен volatile?

Я спрашиваю, потому что, неявный для шаблона Disruptor, данные распределяются между потоками (производитель -> потребитель).

Мое предположение: Существует уже (по крайней мере) один забор памяти между производителем и потребительскими потоками.

+2

Разумное предположение, что было бы интересно, если бы Distruptor мог быть реализован без каких-либо заборов. –

ответ

3

Комментарий Питера дает хороший ключ, и на самом деле, да, есть связанные с памятью заборы.

Вы можете увидеть, что putErderedLong() compareAndSet() и т. Д. Используются в классе Sequence. Каждый из них обеспечивает упорядочение памяти.

Для получения более подробной информации см. source code.