This queue, without atomics, is well known as the simplest implementation of FIFO queues in functional languages without mutable data.

The fact that adding atomics produces an MPSC queue is pretty much obvious.

This is the algorithm that http://www.1024cores.net/home/lock-free-algorithms/queues/non-intrusive-mpsc-node-based-queue alludes to when it says "No need for node order reversion. So pop operation is always O(1)".