_InterlockedCompareExchange64 не работает должным образом, когда определено - PullRequest
0 голосов
/ 06 июля 2018

Почему приведенный ниже код не работает правильно, когда _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;
}
...