My original implementation of update atomically modified the reference counters to ensure
that no increments or decrements were lost in a data race. If counter modifications are lost, NbQCLOCK may make different replacement decisions than the original CLOCK algorithm. However,
the likelihood that a data race occurs is very small. In the x86 ISA, non-atomic increment and
decrement operations have the smallest possible data race window: a single assembly instruction.
Even if two or more threads execute that instruction simultaneously, a data race requires that they
update the same item’s counter in a cache containing possibly millions of items