_InterlockedExchangeAdd systeminternen Funktionen

Microsoft-spezifisch

Bereitstellen der systeminternen Compilerunterstützung für die Funktion Win32 Windows SDK _InterlockedExchangeAdd systeminterne Funktionen .

Syntax

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
);

Parameter

Addend
[in, out] Der zu addierende Wert; durch das Ergebnis des Zusatzs ersetzt.

Wert
[in] Der hinzuzufügende Wert.

Rückgabewert

Der Rückgabewert ist der Anfangswert der Variablen, auf die der Addend-Parameter zeigt.

Anforderungen

Intrinsic Aufbau Header
_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>

Hinweise

Es gibt mehrere Varianten von _InterlockedExchangeAdd, die sich basierend auf den beinhalteten Datentypen und in Abhängigkeit davon unterscheiden, ob prozessorspezifische Semantiken zum Abrufen bzw. Freigeben verwendet werden.

Die _InterlockedExchangeAdd-Funktion funktioniert mit ganzzahligen 32-Bit-Werten, _InterlockedExchangeAdd8 funktioniert mit ganzzahligen 8-Bit-Werten, _InterlockedExchangeAdd16 funktioniert mit ganzzahligen 16-Bit-Werten, und _InterlockedExchangeAdd64 funktioniert mit ganzzahligen 64-Bit-Werten.

Verwenden Sie auf ARM-Plattformen die systeminternen Funktionen mit den Suffixen _acq und _rel, wenn Sie Semantiken zum Abrufen bzw. Freigeben benötigen, wie am Anfang und Ende eines kritischen Abschnitts. Die Systeminternen mit einem _nf Suffix ("kein Zaun") wirken nicht als Speicherbarriere.

Auf Intel-Plattformen, die Hardware Lock Elision (HLE)-Anweisungen unterstützen, enthalten die systeminternen Funktionen mit den Suffixen _HLEAcquire und _HLERelease einen Hinweis für den Prozessor, wie die Leistung durch den Wegfall der Schreibsperre in der Hardware beschleunigt werden kann. Wenn diese systeminternen Elemente auf Plattformen aufgerufen werden, die HLE nicht unterstützen, wird der Hinweis ignoriert.

Diese Routinen sind nur als systeminterne Funktionen verfügbar. Sie sind auch dann systemintern, wenn /Oi oder #pragma systemintern verwendet wird. Es ist nicht möglich, #pragma Funktion für diese systeminternen Funktionen zu verwenden.

Beispiel

Ein Beispiel für die Verwendung _InterlockedExchangeAddfinden Sie unter _InterlockedDecrement.

Ende Microsoft-spezifisch

Siehe auch

Systeminterne Compiler
Schlüsselwörter
Konflikt mit dem x86-Compiler