class Lock
{
volatile int dest = 0;
int exchange = 100;
int compare = 0;
void acquire()
{
While(true)
{
if(interlockedCompareExchange(&dest, exchange, compare) == 0)
{
// lock acquired
break;
}
}
}
// release the lock
Void release()
{
// lock released
dest = 0;
}
};
}
inline int _Compare_exchange_seq_cst_8(volatile _Uint8_t *_Tgt,
_Uint8_t *_Exp, _Uint8_t _Value)
{ /* compare and exchange values atomically with
sequentially consistent memory order */
_Uint8_t _Old_exp = *_Exp; /* read before atomic operation */
_Uint8_t _Prev = _INTRIN_SEQ_CST(_InterlockedCompareExchange64)((volatile _LONGLONG *)_Tgt,
_Value, _Old_exp);
if (_Prev == _Old_exp)
return (1);
else
{ /* copy old value */
*_Exp = _Prev;
return (0);
}
}