首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

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

2013-09-24 
Disruptor 源码分析(10)位置信息是否ok的标识位置信息是否ok的标识在生成者中是通过RingBuffer的pulish方

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一样大小的数组来存储标志.
如果是单个生产者的话是可以用一个变量来存就可以了的.

热点排行