Sdílet prostřednictvím


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

Doplněk
[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 Záhlaví
_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>

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í _InterlockedExchangeAddnajdete v tématu _InterlockedDecrement.

END Microsoft Specific

Viz také

Vnitřní funkce kompilátoru
Klíčová slova
Konflikty s kompilátorem x86