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