@Override
    public void drain(Consumer<E> c, WaitStrategy w, ExitCondition exit)
    {
        final E[] buffer = this.buffer;
        final long mask = this.mask;
        long consumerPosition = lvConsumerPosition();

        int counter = 0;
        while (exit.keepRunning())
        {
            for (int i = 0; i < 4096; i++)
            {
                final long offset = calcCircularRefElementOffset(consumerPosition, mask);
                final E e = lvRefElement(buffer, offset);// LoadLoad
                if (null == e)
                {
                    counter = w.idle(counter);
                    continue;
                }
                counter = 0;
                signalConsumerProgress(consumerPosition, buffer, offset);
                consumerPosition++;
                c.accept(e);
            }
        }
    }
Validates a slow producer over-claim throwing {@link IllegalStateException} if the offer on it can't continue.
jctools-experimental/src/main/java/org/jctools/queues/MpscRelaxedArrayQueue.java