2011-12-08 17 views
0
LONG __cdecl InterlockedCompareExchange(
    __inout LONG volatile *Destination, 
    __in  LONG Exchange, 
    __in  LONG Comparand 
); 

戻り値
機能は、Destinationパラメーターの初期値を返します。InterlockedCompareExchangeが変更された値を返さないのはなぜですか?

好奇心が強い。
InterlockedCompareExchangeがなぜの返信を返すのですか?の値はありますか?彼らがそのように設計した理由はありますか?ここで

答えて

1

は、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; 
    } 

それは初期値を保持できることが重要である理由あなたが参照していますか?

+1

私はもう少し説明をすればいいです。とにかく、ついにそれを手に入れました。ありがとうございました。 – Benjamin

4

これは、最も多くの情報を提供するためです。あなたが変更された値だけを知っていて、それがExchangeに等しければ、元の値はExchangeであるか、それはComparandです。

関連する問題