public long getAndAccumulate(long v, LongBinaryOperator f) {
        long prev, next;
        do {
            prev = lvVal();
            next = f.applyAsLong(prev, v);
        } while (!casVal(prev, next));
        return prev;
    }
Atomically updates the current value with the results of
applying the given function to the current and given values,
returning the previous value. The function should be
side-effect-free, since it may be re-applied when attempted
updates fail due to contention among threads.  The function
is applied with the current value as its first argument,
and the given update as the second argument.

@param v the update value
@param f a side-effect-free function of two arguments
@return the previous value
@see java.util.concurrent.atomic.AtomicLong#getAndAccumulate(long, LongBinaryOperator)
jctools-core/src/main/java/org/jctools/util/PaddedAtomicLong.java