我正在尝试使用 MS VC++ Intrinsic InterlockedCompareExchange128 函数。
作为一个 hello-world,我试图将一个 16 字节的地址与其自身进行比较,并将其替换为其他内容。这编译,但它不工作 - 地址不与新值交换。const_cast 用于使其编译(否则它会因为无法转换 volatile 而哭泣)。
typedef struct t_node
{
volatile __int64 arr[2];
}node;
int main()
{
node *a = new node();
a->arr[0] = 100;
a->arr[1] = 1;
__int64 i = 200;
__int64 j = 500;
char r = _InterlockedCompareExchange128(a->arr, i,j, const_cast<__int64*>(&a->arr[0]));
cout<<endl<<"Interlocked Compare Res: "<<r;
cin.get();
return 0;
}