Sdílet prostřednictvím


vnitřní funkce _InterlockedCompareExchangePointer

Specifické pro Microsoft

Provede atomickovou operaci, která uloží Exchange adresu do Destination adresy, pokud Comparand je adresa stejná Destination .

Syntaxe

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

Cíl
[in, out] Ukazatel na ukazatel na cílovou hodnotu. Znaménko se ignoruje.

Exchange
[v] Ukazatel výměny. Znaménko se ignoruje.

Comparand
[v] Ukazatel pro porovnání s cílem. Znaménko se ignoruje.

Vrácená hodnota

Vrácená hodnota je počáteční hodnota cíle.

Požadavky

Vnitřní Architektura Záhlaví
_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>

Poznámky

_InterlockedCompareExchangePointer provede atomické porovnání Destination adresy s Comparand adresou. Je-li Destination adresa rovna Comparand adrese, Exchange adresa je uložena v adrese určené Destination. V opačném případě se neprovádí žádná operace.

_InterlockedCompareExchangePointer poskytuje vnitřní podporu kompilátoru pro funkci Win32 Windows SDK InterlockedCompareExchangePointer .

Příklad použití _InterlockedCompareExchangePointernajdete v tématu _InterlockedDecrement.

Na platformách ARM použijte vnitřní objekty s příponami _acq_rel , pokud potřebujete získat a uvolnit sémantiku, například na začátku a na konci kritické části. Vnitřní objekty ARM s příponou _nf (bez plotu) nefungují jako paměťová bariéra.

Vnitřní objekty s příponou (bez předběžného _np načtení) brání vložení možné operace předběžného načtení kompilátorem.

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.

END Microsoft Specific

Viz také

Vnitřní funkce kompilátoru
Klíčová slova