Udostępnij za pośrednictwem


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