@Override
    public E poll(long timeout, TimeUnit unit) throws InterruptedException
    {
        final E[] buffer = consumerBuffer;
        final long mask = consumerMask;

        final long cIndex = lpConsumerIndex();
        final long offset = modifiedCalcCircularRefElementOffset(cIndex, mask);
        E e = lvRefElement(buffer, offset);
        if (e == null)
        {
            long timeoutNs = unit.toNanos(timeout);
            if (timeoutNs <= 0)
            {
                return null;
            }
            return parkUntilNext(buffer, cIndex, offset, timeoutNs);
        }

        soRefElement(buffer, offset, null); // release element null
        soConsumerIndex(cIndex + 2); // release cIndex

        return e;
    }
{@inheritDoc}
<p>
This implementation is correct for single consumer thread use only.
jctools-core/src/main/java/org/jctools/queues/MpscBlockingConsumerArrayQueue.java