Почему приведенный ниже код не работает правильно, когда _InterlockedCompareExchange64
используется как определение? Эта инструкция сравнивает пункт назначения, который является 1-м параметром, с 3-м параметром, и, если они равны, 2-й параметр копируется обратно в пункт назначения, который является 1-м параметром.
#include "stdafx.h"
#include "Windows.h"
#define ATOMIC_CAS(ptr, oldval, newval) _InterlockedCompareExchange64(ptr, newval, oldval)
int main()
{
__int64 tt = 20;
ATOMIC_CAS(&tt, 10, 20);
//_InterlockedCompareExchange64(&tt, 10, 20);
return 0;
}