Поделиться через


встроенные функции _InterlockedExchangePointer

Блок, относящийся только к системам Майкрософт

Выполняет атомарную операцию обмена, которая копирует адрес, переданный в качестве второго аргумента в первый аргумент, и возвращает исходный адрес первого.

Синтаксис

void * _InterlockedExchangePointer(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_acq(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_rel(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_nf(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_HLEAcquire(
   void * volatile * Target,
   void * Value
);
void * _InterlockedExchangePointer_HLERelease(
   void * volatile * Target,
   void * Value
);

Параметры

Целевой объект
[in, out] Указатель на указатель на значение для обмена. Функция задает значение Value и возвращает предыдущее значение.

Стоимость
[in] Значение, которое необходимо обменять со значением , на которое указывает target.

Возвращаемое значение

Функция возвращает начальное значение, на которое указывает Target.

Требования

Intrinsic Архитектура Заголовок
_InterlockedExchangePointer x86, ARM, x64, ARM64 <intrin.h>
_InterlockedExchangePointer_acq, _InterlockedExchangePointer_rel, _InterlockedExchangePointer_nf ARM, ARM64 <intrin.h>
_InterlockedExchangePointer_HLEAcquire, _InterlockedExchangePointer_HLERelease x64 <immintrin.h>

В архитектуре x86, _InterlockedExchangePointer есть макрос, вызывающий _InterlockedExchange.

Замечания

В 64-разрядной системе параметры являются 64-разрядными и должны быть выровнены по 64-разрядным границам. В противном случае функция завершается ошибкой. Для 32-разрядной системы параметры 32-разрядные и должны быть выровнены по 32-разрядням границам. Дополнительные сведения см. в разделе "Выравнивание".

На платформах ARM используйте встроенные функции с суффиксами _acq и _rel, если нужно получить и освободить семантику, например в начале и конце критической секции. Встроенный суффикс _nf ("без забора") не выступает в качестве барьера памяти.

На платформах Intel ®, поддерживающих инструкции Hardware Lock Elision (HLE), встроенные функции с суффиксами _HLEAcquire и _HLERelease включают подсказку процессору, как можно повысить производительность, устраняя шаг записи с блокировкой оборудования. Если эти встроенные компоненты вызываются на платформах, которые не поддерживают HLE, это указание игнорируется.

Эти процедуры доступны только как встроенные объекты.

Завершение блока, относящегося только к системам Майкрософт

См. также

Встроенные компоненты компилятора
Конфликты с 32-разрядным (x86) компилятором