This is a lock-free (but not wait-free) multi-producer multi-consumer implementation of a circular queue matching the ThreadAccessPolicy of CircularQueue. 
- Note
- maxCapacity parameters MUST always be a power of 2. 
|  | 
|  | ManyThreadsPerEnd () | 
|  | 
| bool | isEmpty (unsigned maxSize) const | 
|  | 
| bool | isFull (unsigned maxSize) const | 
|  | 
| unsigned | size (unsigned maxSize) const | 
|  | 
| void | init (AtomicInt array[], int maxCapacity) | 
|  | 
| bool | push (AtomicInt array[], int maxSize, int maxCapacity, const AtomicInt &item) | 
|  | 
| bool | pop (AtomicInt array[], int maxSize, int maxCapacity, AtomicInt &item, bool clear=true) | 
|  | 
| unsigned | skip (AtomicInt array[], int maxSize, int maxCapacity, unsigned outmaxsize, bool clear=true) | 
|  | 
| template<class OutputIterator > | 
| unsigned | pop (AtomicInt array[], int maxSize, int maxCapacity, OutputIterator out, unsigned outmaxsize, bool clear=true) | 
|  |