_InterlockedExchangeAdd 組み込み関数

Microsoft 固有の仕様

Win32 Windows SDK _InterlockedExchangeAdd 組み込み関数のコンパイラ組み込みサポートを提供します。

構文

long _InterlockedExchangeAdd(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_acq(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_rel(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_nf(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_HLEAcquire(
   long volatile * Addend,
   long Value
);
long _InterlockedExchangeAdd_HLERelease(
   long volatile * Addend,
   long Value
);
char _InterlockedExchangeAdd8(
   char volatile * Addend,
   char Value
);
char _InterlockedExchangeAdd8_acq(
   char volatile * Addend,
   char Value
);
char _InterlockedExchangeAdd8_rel(
   char volatile * Addend,
   char Value
);
char _InterlockedExchangeAdd8_nf(
   char volatile * Addend,
   char Value
);
short _InterlockedExchangeAdd16(
   short volatile * Addend,
   short Value
);
short _InterlockedExchangeAdd16_acq(
   short volatile * Addend,
   short Value
);
short _InterlockedExchangeAdd16_rel(
   short volatile * Addend,
   short Value
);
short _InterlockedExchangeAdd16_nf(
   short volatile * Addend,
   short Value
);
__int64 _InterlockedExchangeAdd64(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_acq(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_rel(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_nf(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_HLEAcquire(
   __int64 volatile * Addend,
   __int64 Value
);
__int64 _InterlockedExchangeAdd64_HLERelease(
   __int64 volatile * Addend,
   __int64 Value
);

パラメーター

Addend
[in、out] 加算される値。加算の結果によって置き換えられます。

Value
[in] 加算する値。

戻り値

戻り値は Addend パラメーターが指す変数の初期値です。

要件

Intrinsic Architecture ヘッダー
_InterlockedExchangeAdd_InterlockedExchangeAdd8_InterlockedExchangeAdd16 x86、ARM、x64、ARM64 <intrin.h>
_InterlockedExchangeAdd64 ARM、x64、ARM64 <intrin.h>
_InterlockedExchangeAdd_acq, _InterlockedExchangeAdd_rel, _InterlockedExchangeAdd_nf, _InterlockedExchangeAdd8_acq, , _InterlockedExchangeAdd8_rel, _InterlockedExchangeAdd8_nf, _InterlockedExchangeAdd16_acq, , _InterlockedExchangeAdd16_rel, _InterlockedExchangeAdd16_nf, _InterlockedExchangeAdd64_acq_InterlockedExchangeAdd64_rel_InterlockedExchangeAdd64_nf ARM、ARM64 <intrin.h>
_InterlockedExchangeAdd_HLEAcquire, _InterlockedExchangeAdd_HLERelease x86、x64 <immintrin.h>
_InterlockedExchangeAdd64_HLEAcquire, _InterlockedExchangeAdd64_HLErelease x64 <immintrin.h>

解説

_InterlockedExchangeAdd には、格納するデータ型、およびプロセッサ固有の取得または解放のセマンティクスを使用するかどうかに基づき、異なるいくつかの種類があります。

_InterlockedExchangeAdd 関数は 32 ビット整数値で動作しますが、_InterlockedExchangeAdd8 は 8 ビット整数値、_InterlockedExchangeAdd16 は 16 ビット整数値、および _InterlockedExchangeAdd64 は 64 ビット整数値で動作します。

ARM プラットフォームでは、クリティカル セクションの最初と最後などで取得と解放のセマンティクスを必要とする場合は、_acq および _rel サフィックスの付いた組み込みを使用します。 組み込みで _nf ("no fence") のサフィックスの付いたものは、メモリ バリアとして機能しません。

Hardware Lock Elision (HLE) 命令をサポートする Intel プラットフォームでは、_HLEAcquire および _HLERelease サフィックスの付いた組み込みにプロセッサへのヒントが含まれています。このヒントによりハードウェアでのロック書き込み手順を省くことで、パフォーマンスを向上させることができます。 HLE をサポートしていないプラットフォームでこれらの組み込みが呼び出された場合、ヒントは無視されます。

これらのルーチンは、組み込みとしてのみ使用できます。 /Oi または #pragma intrinsic が使用されている場合でも、これらは組み込みです。 これらの組み込みで #pragma 関数を使用することはできません。

_InterlockedExchangeAdd の使用例については、_InterlockedDecrement に関するページを参照してください。

Microsoft 固有の仕様はここまで

関連項目

コンパイラの組み込み
キーワード
x86 コンパイラとの競合