vnitřní funkce _InterlockedExchangeAdd
Specifické pro Microsoft
Poskytněte vnitřní podporu kompilátoru pro funkci vnitřních funkcí sady Windows SDK win32 _InterlockedExchangeAdd.
Syntaxe
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
);
Parametry
Druhý sčítanec
[in, out] Hodnota, ke které má být přidána; nahrazeno výsledkem sčítání.
Hodnota
[v] Hodnota, kterou chcete přidat.
Vrácená hodnota
Návratová hodnota je počáteční hodnota proměnné odkazované parametrem Addend
.
Požadavky
Vnitřní | Architektura | Hlavička |
---|---|---|
_InterlockedExchangeAdd , , _InterlockedExchangeAdd8 _InterlockedExchangeAdd16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_acq , _InterlockedExchangeAdd_rel , , , _InterlockedExchangeAdd8_rel _InterlockedExchangeAdd16_nf _InterlockedExchangeAdd8_nf _InterlockedExchangeAdd64_rel _InterlockedExchangeAdd8_acq _InterlockedExchangeAdd16_acq _InterlockedExchangeAdd16_rel _InterlockedExchangeAdd64_acq _InterlockedExchangeAdd_nf _InterlockedExchangeAdd64_nf |
ARM, ARM64 | <intrin.h> |
_InterlockedExchangeAdd_HLEAcquire , _InterlockedExchangeAdd_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchangeAdd64_HLEAcquire , _InterlockedExchangeAdd64_HLErelease |
x64 | <immintrin.h> |
Poznámky
Existuje několik variant _InterlockedExchangeAdd
, které se liší v závislosti na datových typech, které zahrnují, a zda se používá sémantika specifická pro procesor nebo vydání.
_InterlockedExchangeAdd
Zatímco funkce pracuje s 32bitovými celočíselnou hodnotou, _InterlockedExchangeAdd8
pracuje s 8bitovými celočíselnou hodnotou, _InterlockedExchangeAdd16
pracuje s 16bitovými celočíselnou hodnotou a _InterlockedExchangeAdd64
pracuje s 64bitovými celočíselnou hodnotou.
Na platformách ARM použijte vnitřní objekty s příponami _acq
_rel
, pokud potřebujete získat a uvolnit sémantiku, například na začátku a na konci kritické části. Vnitřní objekty s příponou _nf
(bez plotu) nefungují jako paměťová bariéra.
Na platformách Intel, které podporují instrukce hardwarového zámku Elision (HLE), vnitřní objekty s _HLEAcquire
příponami _HLERelease
obsahují nápovědu k procesoru, který může zrychlit výkon odstraněním kroku zápisu zámku v hardwaru. Pokud jsou tyto vnitřní objekty volány na platformách, které nepodporují HLE, tip se ignoruje.
Tyto rutiny jsou k dispozici pouze jako vnitřní objekty. Jsou vnitřní, i když se používá /Oi nebo #pragma vnitřní . U těchto vnitřních objektů není možné použít funkci #pragma.
Příklad
Ukázku použití _InterlockedExchangeAdd
najdete v tématu _InterlockedDecrement.
END Microsoft Specific
Viz také
Vnitřní funkce kompilátoru
Klíčová slova
Konflikty s kompilátorem x86