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 Target
odkazuje .
Vrácená hodnota
Vrátí počáteční hodnotu, na kterou Target
odkazuje .
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í _InterlockedExchange
najdete v tématu _InterlockedDecrement.
END Microsoft Specific
Viz také
Vnitřní funkce kompilátoru
Klíčová slova
Konflikty s kompilátorem x86