Is my lockless data structure correct?
I'm not an expert, but I this line caught my eye:

volatile int m_acquireCount, m_releaseCount;


m_acquireCount and m_releaseCount will be part of the same cache line!

Therefor I expect no performance advantages compared to the simpler AtomicIncrement/AtomicDecrement on one variable.