Systeminterne Funktionen „_InterlockedExchangeAdd“
Microsoft-spezifisch
Bereitstellung von systeminterner Compilerunterstützung für die Win32-Windows SDK Systeminterne Funktionen „_InterlockedExchangeAdd“-Funktion.
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
[in, out] Addend
Der hinzuzufügende Wert; ersetzt durch das Ergebnis der Addition.[in] Value
Der hinzuzufügende Wert.
Rückgabewert
Der Rückgabewert ist der Anfangswert der Variablen, auf die der Addend-Parameter zeigt.
Anforderungen
Systemintern |
Architektur |
Header |
---|---|---|
_InterlockedExchangeAdd, _InterlockedExchangeAdd8, _InterlockedExchangeAdd16, _InterlockedExchangeAdd64 |
x86, ARM, x64 |
<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 |
<intrin.h> |
_InterlockedExchangeAdd_HLEAcquire, _InterlockedExchangeAdd_HLERelease, _InterlockedExchangeAdd64_HLEAcquire, _InterlockedExchangeAdd64_HLErelease |
x86, 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 abrufen und freigeben müssen, beispielsweise am Anfang und Ende eines kritischen Abschnitts. Die systeminternen Funktionen mit einer _nf-Suffix ("no fence") fungieren 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 Funktionen auf Plattformen aufgerufen werden, die HLE nicht unterstützen, wird der Hinweis ignoriert.
Diese Routinen sind nur als systeminterne Funktionen verfügbar. Folglich sind dies systeminterne Funktionen, unabhängig davon, ob /Oi oder #pragma intrinsic verwendet wird. Die Verwendung von #pragma function für diese systeminternen Funktionen ist nicht möglich.
Beispiel
Ein Beispiel zur Verwendung von _InterlockedExchangeAdd finden Sie unter _InterlockedDecrement.