InterlockedCompareExchange 関数 (winnt.h)

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

ポインター値を交換する場合、この関数は InterlockedCompareExchangePointer 関数に置き換えられます。

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

構文

LONG InterlockedCompareExchange(
  [in, out] LONG volatile *Destination,
  [in]      LONG          ExChange,
  [in]      LONG          Comperand
);

パラメーター

[in, out] Destination

変換先の値へのポインター。

[in] ExChange

交換値。

[in] Comperand

Destination と比較する値。

戻り値

関数は Destination パラメーターの初期値を返します。

解説

関数は 、Destination 値と Comparand 値を比較します。 Destination の値が Comparand 値と等しい場合、Exchange 値は Destination で指定されたアドレスに格納されます。 それ以外の場合は演算が実行されません。

この関数のパラメーターは、32 ビット境界に配置する必要があります。それ以外の場合、関数はマルチプロセッサ x86 システムおよび x86 以外のシステムで予期しない動作をします。 malloccallocHeapAllocHeapReAlloc は、十分にアラインされたメモリを提供します。

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

この関数は、可能な場合はコンパイラ組み込みを使用して実装されます。 詳細については、WinBase.h ヘッダー ファイルと _InterlockedCompareExchangeを参照してください。

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

Itanium ベースのシステム: パフォーマンスクリティカルなアプリケーションの場合は、代わりに InterlockedCompareExchangeAcquire または InterlockedCompareExchangeRelease を使用してください。

メモ この関数は、Windows RT ベースのシステムでサポートされています。
 

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー winnt.h (Windows.h を含む)
Library Kernel32.lib
[DLL] Kernel32.dll

関連項目

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

InterlockedCompare64Exchange128

InterlockedCompareExchange128

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

同期関数