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 に答える