funkcje wewnętrzne _InterlockedCompareExchangePointer
Specyficzne dla firmy Microsoft
Wykonuje niepodzielna operację, która przechowuje Exchange
adres w adresie Destination
, jeśli Comparand
adres i Destination
są równe.
Składnia
void * _InterlockedCompareExchangePointer (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_acq (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_HLEAcquire (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_HLERelease (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_nf (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_np (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
void * _InterlockedCompareExchangePointer_rel (
void * volatile * Destination,
void * Exchange,
void * Comparand
);
Parametry
Lokalizacja docelowa
[in, out] Wskaźnik do wskaźnika do wartości docelowej. Znak jest ignorowany.
Exchange
[in] Wskaźnik programu Exchange. Znak jest ignorowany.
Comparand
[in] Wskaźnik do porównania z miejscem docelowym. Znak jest ignorowany.
Wartość zwracana
Wartość zwracana jest początkową wartością miejsca docelowego.
Wymagania
Nieodłączny | Architektura | Nagłówek |
---|---|---|
_InterlockedCompareExchangePointer |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedCompareExchangePointer_acq , , _InterlockedCompareExchangePointer_nf _InterlockedCompareExchangePointer_rel |
ARM, ARM64 | <iiintrin.h> |
_InterlockedCompareExchangePointer_HLEAcquire , _InterlockedCompareExchangePointer_HLERelease |
x86, x64 | <immintrin.h> |
Uwagi
_InterlockedCompareExchangePointer
Wykonuje niepodzielne porównanie Destination
adresu z Comparand
adresem. Destination
Jeśli adres jest równy Comparand
adresowi, Exchange
adres jest przechowywany w adresie określonym przez Destination
. W przeciwnym razie nie jest wykonywana żadna operacja.
_InterlockedCompareExchangePointer
Zapewnia wewnętrzną obsługę kompilatora dla funkcji InterlockedCompareExchangePointer zestawu Windows SDK systemu Windows w systemie Win32.
Aby zapoznać się z przykładem korzystania z usługi _InterlockedCompareExchangePointer
, zobacz _InterlockedDecrement.
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 arm z sufiksem _nf
("bez ogrodzenia") nie działają jako bariera pamięci.
Funkcje wewnętrzne z sufiksem _np
("brak pobierania wstępnego") uniemożliwiają wstawienie możliwej operacji pobierania wstępnego przez kompilator.
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.
END Microsoft Specific