vnitřní funkce _InterlockedExchange

Specifické pro Microsoft

Vygeneruje atomický pokyn, který nastaví zadanou hodnotu.

Syntaxe

long _InterlockedExchange(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_acq(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_HLEAcquire(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_HLERelease(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_nf(
   long volatile * Target,
   long Value
);
long _InterlockedExchange_rel(
   long volatile * Target,
   long Value
);
char _InterlockedExchange8(
   char volatile * Target,
   char Value
);
char _InterlockedExchange8_acq(
   char volatile * Target,
   char Value
);
char _InterlockedExchange8_nf(
   char volatile * Target,
   char Value
);
char _InterlockedExchange8_rel(
   char volatile * Target,
   char Value
);
short _InterlockedExchange16(
   short volatile * Target,
   short Value
);
short _InterlockedExchange16_acq(
   short volatile * Target,
   short Value
);
short _InterlockedExchange16_nf(
   short volatile * Target,
   short Value
);
short _InterlockedExchange16_rel(
   short volatile * Target,
   short Value
);
__int64 _InterlockedExchange64(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_acq(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_HLEAcquire(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_HLERelease(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_nf(
   __int64 volatile * Target,
   __int64 Value
);
__int64 _InterlockedExchange64_rel(
   __int64 volatile * Target,
   __int64 Value
);

Parametry

Cíl
[in, out] Ukazatel na hodnotu, kterou chcete vyměnit. Funkce nastaví tuto proměnnou na Value předchozí hodnotu a vrátí její předchozí hodnotu.

Hodnota
[v] Hodnota, na kterou má být vyměněná s hodnotou, na kterou Targetodkazuje .

Vrácená hodnota

Vrátí počáteční hodnotu, na kterou Targetodkazuje .

Požadavky

Vnitřní Architektura Hlavička
_InterlockedExchange, , _InterlockedExchange8_InterlockedExchange16 x86, ARM, x64, ARM64 <intrin.h>
_InterlockedExchange64 ARM, x64, ARM64 <intrin.h>
_InterlockedExchange_acq, _InterlockedExchange_nf, , _InterlockedExchange_rel, _InterlockedExchange8_nf_InterlockedExchange8_acq, _InterlockedExchange8_rel_InterlockedExchange64_nf_InterlockedExchange16_nf_InterlockedExchange16_acq_InterlockedExchange16_rel_InterlockedExchange64_acq, _InterlockedExchange64_rel ARM, ARM64 <intrin.h>
_InterlockedExchange_HLEAcquire, _InterlockedExchange_HLERelease x86, x64 <immintrin.h>
_InterlockedExchange64_HLEAcquire, _InterlockedExchange64_HLERelease x64 <immintrin.h>

Poznámky

_InterlockedExchange poskytuje vnitřní podporu kompilátoru pro funkci Win32 Windows SDK InterlockedExchange .

Existuje několik variant _InterlockedExchange , 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í.

_InterlockedExchange Zatímco funkce pracuje s 32bitovými celočíselnou hodnotou, _InterlockedExchange8 pracuje s 8bitovými celočíselnou hodnotou, _InterlockedExchange16 pracuje s 16bitovými celočíselnou hodnotou a _InterlockedExchange64 pracuje s 64bitovými celočíselnou hodnotou.

Na platformách ARM použijte vnitřní objekty s příponami _acq a získejte a _rel uvolněte 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.

Příklad

Ukázku použití _InterlockedExchangenajdete v tématu _InterlockedDecrement.

END Microsoft Specific

Viz také

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