0
LONG __cdecl InterlockedCompareExchange(
  __inout  LONG volatile *Destination,
  __in     LONG Exchange,
  __in     LONG Comparand
);

返回值
该函数返回 Destination 参数的初始值。

只是好奇。
为什么 InterlockedCompareExchange 返回初始值?他们这样设计有什么原因吗?

4

2 回答 2

7

因为这为您提供了最多的信息。如果您只知道更改后的值并且它恰好等于Exchange,那么初始值可能是Exchange或可能是Comparand

于 2015-01-20T13:41:39.500 回答
2

这是来自 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;
    }

你明白为什么能够保留初始值很重要吗?

于 2011-12-08T05:10:11.223 回答