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 以外のシステムで予期しない動作をします。 malloc、 calloc、 HeapAlloc、 HeapReAlloc は、十分にアラインされたメモリを提供します。
インターロックされた関数は、複数のスレッドによって共有される変数へのアクセスを同期するための簡単なメカニズムを提供します。 この関数は、他のインターロックされた関数の呼び出しに関してアトミックです。
この関数は、可能な場合はコンパイラ組み込みを使用して実装されます。 詳細については、WinBase.h ヘッダー ファイルと _InterlockedCompareExchangeを参照してください。
この関数は、メモリ操作が順番に完了するように、完全なメモリ バリア (またはフェンス) を生成します。
Itanium ベースのシステム: パフォーマンスクリティカルなアプリケーションの場合は、代わりに InterlockedCompareExchangeAcquire または InterlockedCompareExchangeRelease を使用してください。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winnt.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |
関連項目
InterlockedCompare64Exchange128
InterlockedCompareExchange16Acquire
InterlockedCompareExchange16NoFence
InterlockedCompareExchange16Release
InterlockedCompareExchangeAcquire
InterlockedCompareExchangeAcquire64
InterlockedCompareExchangeNoFence
InterlockedCompareExchangeNoFence64
InterlockedCompareExchangePointer
InterlockedCompareExchangePointerAcquire
InterlockedCompareExchangePointerNoFence
InterlockedCompareExchangePointerRelease
InterlockedCompareExchangeRelease