读书人

Disruptor 源码分析(十) 位置信息是

发布时间: 2013-09-24 10:59:52 作者: rapoo

Disruptor 源码分析(10) 位置信息是否ok的标识
位置信息是否ok的标识

在生成者中是通过RingBuffer的pulish方法来修改的
调用顺序是这样的:

public boolean isAvailable(long sequence)    {        int index = calculateIndex(sequence);        int flag = calculateAvailabilityFlag(sequence);        long bufferAddress = (index * SCALE) + BASE;        return UNSAFE.getIntVolatile(availableBuffer, bufferAddress) == flag;    }

可以看到isAvailable方法和生成者的逻辑是一样的.这样就能正常验证了

上面说的多个生产者的情况,可以看到用了个和RingBuffer一样大小的数组来存储标志.
如果是单个生产者的话是可以用一个变量来存就可以了的.

读书人网 >开源软件

热点推荐