I made a very simple spinlock using the Interlocked functions in Windows and tested it on a dual-core CPU (two threads that increment a variable);
The program seems
I'm pretty sure it should be implemented as follows:
class SpinLock { long lockValue; SpinLock(long value) : lockValue(value) { } void Lock() { while(InterlockedCompareExchange(&lockValue, 1, 0) != 0) { WaitABit(); } } void Unlock() { InterlockedExchange(&lockValue, 0); } };