Встроенные функции _InterlockedExchangePointer
Блок, относящийся только к системам Microsoft
Выполняет элементарную операцию обмена, которая копирует адрес, переданный в качестве второго аргумента в первый и возвращает исходный адрес первого.
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] Target
Указатель на указатель на значение для обмена. Эта функция устанавливает значение Value и возвращает предыдущее значение.[in] Value
Значение для обмена на значение, на которое указывает Target.
Возвращаемое значение
Функция возвращает начальное значение, на которое указывает Target.
Требования
Встроенная функция |
Архитектура |
Header |
---|---|---|
_InterlockedExchangePointer |
x86, ARM, x64 |
< intrin.h > |
_InterlockedExchangePointer_acq, _InterlockedExchangePointer_rel, _InterlockedExchangePointer_nf |
ARM |
< intrin.h > |
_InterlockedExchangePointer_HLEAcquire, _InterlockedExchangePointer_HLERelease |
x64 с поддержкой HLE |
< immintrin.h > |
В архитектуре x86, _InterlockedExchangePointer есть макрос, вызывающий _InterlockedExchangePointer.
Заметки
Для 64-разрядной системы параметры 64-разрядные и должны быть выровнены по 64-разрядным границам; в противном случае функция завершается с ошибкой. Для 32-разрядной системы параметры 32-разрядные и должны быть выровнены по 32-разрядням границам. Дополнительные сведения см. в Выравнивание данных.
На платформах ARM используйте встроенные функции с суффиксами _acq и _rel, если нужно получить и освободить семантику, например в начале и конце критической секции. Встроенная функция с суффиксом _nf («без границ») не действует как ограничитель памяти.
На платформах Intel ®, поддерживающих инструкции Hardware Lock Elision (HLE), встроенные функции с суффиксами _HLEAcquire и _HLERelease включают подсказку процессору, как можно повысить производительность, устраняя шаг записи с блокировкой оборудования. Если эти встроенные функции вызываются на платформах, не поддерживающих HLE, подсказка игнорируется.
Эти процедуры доступны только как встроенные объекты.