LONG __cdecl InterlockedCompareExchange(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
返回值
该函数返回 Destination 参数的初始值。
只是好奇。
为什么 InterlockedCompareExchange 返回初始值?他们这样设计有什么原因吗?
LONG __cdecl InterlockedCompareExchange(
__inout LONG volatile *Destination,
__in LONG Exchange,
__in LONG Comparand
);
返回值
该函数返回 Destination 参数的初始值。
只是好奇。
为什么 InterlockedCompareExchange 返回初始值?他们这样设计有什么原因吗?
因为这为您提供了最多的信息。如果您只知道更改后的值并且它恰好等于Exchange
,那么初始值可能是Exchange
或可能是Comparand
。
这是来自 MSDN 的一个很好的例子:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683560%28v=vs.85%29.aspx
for(;;)
{
// calculate the function
new_value = Random(old_value);
// set the new value if the current value is still the expected one
cur_value = InterlockedCompareExchange(seed, new_value, old_value);
// we found the expected value: the exchange happened
if(cur_value == old_value)
break;
// recalculate the function on the unexpected value
old_value = cur_value;
}
你明白为什么能够保留初始值很重要吗?