1

我被迫在windows 98 se. vc6有奇怪的InterlockedCompareExchange定义:

void* InterlockedCompareExchange(void**, void*, void*);

msdn然而,像这样定义它(因为windows xp):

LONG InterlockedCompareExchange(LONG*, LONG, LONG);

有谁记得如何使用它(我需要原子地获取互锁变量的值)?

4

1 回答 1

1

Windows 98 不支持 64bit,所以void*LONG字节大小相同。大多数操作系统实际上使用该LONG定义,但如果 VC6 使用 `void* 则只需在需要的地方进行类型转换:

LONG value;
LONG ret = (LONG) InterlockedCompareExchange((void**)&value, (void*)ExchangeValue, (void*)CompareValue);
于 2014-03-05T00:22:53.830 回答