InterlockedCompareExchangePointer 関数 (winnt.h)
指定した値に対してアトミックな比較と交換操作を実行します。 関数は、指定された 2 つのポインター値を比較し、比較の結果に基づいて別のポインター値と交換します。
ポインター以外の値を操作するには、 InterlockedCompareExchange 関数を 使用します。
構文
PVOID InterlockedCompareExchangePointer(
[in, out] PVOID volatile *Destination,
[in] PVOID Exchange,
[in] PVOID Comperand
);
パラメーター
[in, out] Destination
変換先の値へのポインターへのポインター。
[in] Exchange
交換値。
[in] Comperand
Destination と比較する値。
戻り値
関数は Destination パラメーターの初期値を返します。
注釈
関数は、 Destination 値と Comparand 値を比較します。 Destination の値が Comparand 値と等しい場合、Exchange の値は Destination で指定されたアドレスに格納されます。 それ以外の場合は演算が実行されません。
64 ビット システムでは、パラメーターは 64 ビットであり、64 ビット境界に配置する必要があります。それ以外の場合、関数は予期しない動作をします。 32 ビット システムではパラメーターは 32 ビットであり、32 ビットの境界に合わせて調整する必要があります。
インターロック関数は、複数のスレッドによって共有される変数へのアクセスを同期するための簡単なメカニズムを提供します。 この関数は、他のインターロックされた関数の呼び出しに関してアトミックです。
この関数は、可能な限りコンパイラ組み込みを使用して実装されます。 詳細については、WinBase.h ヘッダー ファイルと _InterlockedCompareExchangePointerを参照してください。
この関数は、メモリ操作が順番に完了するように、完全なメモリ バリア (またはフェンス) を生成します。
Itanium ベースのシステム: パフォーマンスクリティカルなアプリケーションの場合は、代わりに InterlockedCompareExchangePointerAcquire または InterlockedCompareExchangePointerRelease を使用してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | winnt.h (Windows.h を含む) |
こちらもご覧ください
InterlockedCompare64Exchange128
InterlockedCompareExchange16Acquire
InterlockedCompareExchange16NoFence
InterlockedCompareExchange16Release
InterlockedCompareExchangeAcquire
InterlockedCompareExchangeAcquire64
InterlockedCompareExchangeNoFence
InterlockedCompareExchangeNoFence64
InterlockedCompareExchangePointerAcquire
InterlockedCompareExchangePointerNoFence
InterlockedCompareExchangePointerRelease
InterlockedCompareExchangeRelease