funkcje wewnętrzne _InterlockedExchangeAdd
Specyficzne dla firmy Microsoft
Zapewnianie wewnętrznej obsługi zestawu Win32 Windows SDK _InterlockedExchangeAdd funkcji wewnętrznych.
Składnia
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
Składnik
[in, out] Wartość do dodania; zastąpiony przez wynik dodawania.
Wartość
[in] Wartość do dodania.
Wartość zwracana
Wartość zwracana jest początkową wartością zmiennej wskazywaną Addend
przez parametr .
Wymagania
Nieodłączny | Architektura | Nagłówek |
---|---|---|
_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> |
Uwagi
Istnieje kilka odmian, _InterlockedExchangeAdd
które różnią się w zależności od typów danych, które obejmują, i czy jest używana semantyka pozyskiwania lub wydawania specyficzne dla procesora.
_InterlockedExchangeAdd
Chociaż funkcja działa na 32-bitowych wartościach całkowitych, _InterlockedExchangeAdd8
działa na 8-bitowych wartościach całkowitych, _InterlockedExchangeAdd16
działa na 16-bitowych wartościach całkowitych i _InterlockedExchangeAdd64
działa na 64-bitowych wartościach całkowitych.
Na platformach ARM użyj funkcji wewnętrznych i _acq
_rel
sufiksów, jeśli potrzebujesz semantyki uzyskiwania i wydawania, takich jak na początku i na końcu sekcji krytycznej. Funkcje wewnętrzne z sufiksem _nf
("bez ogrodzenia") nie działają jako bariera pamięci.
Na platformach Intel, które obsługują instrukcje dotyczące blokady sprzętu Elision (HLE), funkcje wewnętrzne z sufiksami _HLEAcquire
zawierają _HLERelease
wskazówkę dla procesora, który może przyspieszyć wydajność, eliminując krok zapisu blokady w sprzęcie. Jeśli te funkcje wewnętrzne są wywoływane na platformach, które nie obsługują HLE, wskazówka jest ignorowana.
Te procedury są dostępne tylko jako funkcje wewnętrzne. Są one wewnętrzne nawet wtedy, gdy /Oi lub #pragma jest używany wewnętrzny . Nie można użyć funkcji #pragma w tych funkcjach wewnętrznych.
Przykład
Aby zapoznać się z przykładem korzystania z usługi _InterlockedExchangeAdd
, zobacz _InterlockedDecrement.
END Microsoft Specific
Zobacz też
Funkcje wewnętrzne kompilatora
Słowa kluczowe
Konflikty z kompilatorem x86