Sdílet prostřednictvím


Vnitřní funkce _InterlockedExchangeAdd

Specifické pro Microsoft

Vnitřní podporují kompilátoru Win32 Windows SDK Vnitřní funkce _InterlockedExchangeAdd funkce.

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

  • [ve out] Addend
    Hodnota, která má být přidán do; nahrazuje výsledek přidání.

  • [in] Value
    Hodnota k přidání.

Vrácená hodnota

Vrácená hodnota je počáteční hodnota proměnné, na kterou odkazuje Addend parametru.

Požadavky

Vnitřní

Architektura

Záhlaví

_InterlockedExchangeAdd, _InterlockedExchangeAdd8, _InterlockedExchangeAdd16, _InterlockedExchangeAdd64

x 86, 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 >

Poznámky

Existuje několik variant na _InterlockedExchangeAdd který lišit v závislosti na datové typy, zahrnují a zda získat specifické procesory nebo slouží k uvolnění sémantiku.

Při _InterlockedExchangeAdd funkce se používá pro 32bitové celočíselné hodnoty _InterlockedExchangeAdd8 8-bit celočíselné hodnoty, bude pracovat _InterlockedExchangeAdd16 pracuje na 16bitové celočíselné hodnoty, a _InterlockedExchangeAdd64 pracuje na 64bitové celočíselné hodnoty.

Na platformách ARM, použijte vnitřní objekty s _acq a _rel přípony, pokud potřebujete získat a verze sémantiku, například na začátku a na konci kritické sekce.Vnitřní objekty s _nf příponu ("žádné ohraničení") není fungovat jako překážku paměti.

Na platformách Intel, které podporují hardwaru uzamčení Elision (HLE) pokyny, vnitřní objekty s _HLEAcquire a _HLERelease přípony zahrnout nápovědu pro procesor, který mohou urychlit výkonu tím, že eliminuje krok zápisu uzamčení hardwaru.Pokud tyto vnitřní objekty se nazývají na platformách, které nepodporují HLE, je pokyn ignorován.

Tyto rutiny jsou pouze k dispozici jako vnitřní objekty.Proto se jedná o vnitřní zda nebo není /Oi nebo #pragma vnitřní se používá.Není možné použít funkce #pragma na tyto vnitřní objekty.

Příklad

Příklad použití _InterlockedExchangeAdd, naleznete v části _InterlockedDecrement.

Viz také

Referenční dokumentace

Vnitřní funkce kompilátoru

Klíčová slova jazyka C++

Konflikty s překladačem x86