_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
Summand
[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_nf _InterlockedExchangeAdd8_rel , _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 _InterlockedExchangeAdd
finden Sie unter _InterlockedDecrement.
Ende Microsoft-spezifisch
Siehe auch
Intrinsische Compilerfunktionen
Schlüsselwörter
Konflikt mit dem x86-Compiler