встроенные функции _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 и возвращает предыдущее значение.
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) компилятором