Atomically take one element from the queue. Wait blocking or spinning.
Atomically put one element into the queue.
If at least one element is in the queue, atomically take one element from the queue store it into e, and return true. Otherwise return false;
Basic interface for all queues implemented here. Is an input and output range.