InterlockedCompareExchange128 関数 (winnt.h)

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 128 ビット値を比較し、比較の結果に基づいて別の 128 ビット値と交換します。

16 ビット値を操作するには、 InterlockedCompareExchange16 関数を 使用します。

32 ビット値を操作するには、 InterlockedCompareExchange 関数を使用します。

64 ビット値を操作するには、 InterlockedCompareExchange64 関数を使用します。

構文

BOOLEAN InterlockedCompareExchange128(
  [in, out] LONG64 volatile *Destination,
  [in]      LONG64          ExchangeHigh,
  [in]      LONG64          ExchangeLow,
  [in, out] LONG64          *ComparandResult
);

パラメーター

[in, out] Destination

変換先の値へのポインター。 このパラメーターは、128 ビット フィールドと見なされる 2 つの 64 ビット整数の配列です。

[in] ExchangeHigh

交換値の高い部分。

[in] ExchangeLow

交換値の低い部分。

[in, out] ComparandResult

比較対象の値。 このパラメーターは、128 ビット フィールドと見なされる 2 つの 64 ビット整数の配列です。 出力時に、これは宛先の元の値で上書きされます。

戻り値

この関数は、 ComparandResultDestination パラメーターの元の値と等しい場合は 1 を返し、 ComparandResultDestination パラメーターの元の値と等しくない場合は 0 を返します。

注釈

関数は 、Destination 値と ComparandResult 値を比較します。

  • Destination 値が ComparandResult 値と等しい場合、ExchangeHighExchangeLow の値は Destination で指定された配列、および ComparandResult で指定された配列にも格納されます。
  • それ以外の場合、 変換先 は変更されません。
比較の結果に関係なく、元の Destination 値は ComparandResult で指定された配列に格納されます。

この関数のパラメーターは、16 バイト境界に配置する必要があります。それ以外の場合、関数は x64 システムで予期しない動作をします。 「_aligned_malloc」を参照してください。

インターロックされた関数は、複数のスレッドによって共有される変数へのアクセスを同期するための簡単なメカニズムを提供します。 この関数は、他のインターロックされた関数の呼び出しに関してアトミックです。

この関数は x64 ベースのシステムでのみ使用でき、コンパイラ組み込みを使用して実装されます。 詳細については、WinBase.h ヘッダー ファイルと _InterlockedCompareExchange128を参照してください。

この関数は、メモリ操作が順番に完了するように、完全なメモリ バリア (またはフェンス) を生成します。

要件

要件
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winnt.h (Windows.h を含む)

こちらもご覧ください

インタロックされた変数アクセス

InterlockedCompare64Exchange128

InterlockedCompareExchange

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

同期関数