次の方法で共有


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 RT ベースのシステムでサポートされています。
 

要件

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

こちらもご覧ください

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

InterlockedCompare64Exchange128

InterlockedCompareExchange

InterlockedCompareExchange128

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

同期関数