встроенные функции _InterlockedExchange
Блок, относящийся только к системам Майкрософт
Создает атомарные инструкция для присваивания заданного значения.
Синтаксис
long _InterlockedExchange(
long volatile * Target,
long Value
);
long _InterlockedExchange_acq(
long volatile * Target,
long Value
);
long _InterlockedExchange_HLEAcquire(
long volatile * Target,
long Value
);
long _InterlockedExchange_HLERelease(
long volatile * Target,
long Value
);
long _InterlockedExchange_nf(
long volatile * Target,
long Value
);
long _InterlockedExchange_rel(
long volatile * Target,
long Value
);
char _InterlockedExchange8(
char volatile * Target,
char Value
);
char _InterlockedExchange8_acq(
char volatile * Target,
char Value
);
char _InterlockedExchange8_nf(
char volatile * Target,
char Value
);
char _InterlockedExchange8_rel(
char volatile * Target,
char Value
);
short _InterlockedExchange16(
short volatile * Target,
short Value
);
short _InterlockedExchange16_acq(
short volatile * Target,
short Value
);
short _InterlockedExchange16_nf(
short volatile * Target,
short Value
);
short _InterlockedExchange16_rel(
short volatile * Target,
short Value
);
__int64 _InterlockedExchange64(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_acq(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_HLEAcquire(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_HLERelease(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_nf(
__int64 volatile * Target,
__int64 Value
);
__int64 _InterlockedExchange64_rel(
__int64 volatile * Target,
__int64 Value
);
Параметры
Целевой объект
[in, out] Указатель на значение для обмена. Функция присваивает этой переменной Value
и возвращает предыдущее значение.
Value
[in] Значение для обмена значением Target
, на которое указывает значение.
Возвращаемое значение
Возвращает начальное значение, на которое указывает Target
.
Требования
Intrinsic | Архитектура | Верхний колонтитул |
---|---|---|
_InterlockedExchange , , _InterlockedExchange8 _InterlockedExchange16 |
x86, ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchange64 |
ARM, x64, ARM64 | <intrin.h> |
_InterlockedExchange_acq , _InterlockedExchange_nf , _InterlockedExchange_rel _InterlockedExchange8_acq _InterlockedExchange8_nf _InterlockedExchange8_rel _InterlockedExchange16_acq _InterlockedExchange16_nf _InterlockedExchange16_rel _InterlockedExchange64_acq _InterlockedExchange64_nf _InterlockedExchange64_rel |
ARM, ARM64 | <intrin.h> |
_InterlockedExchange_HLEAcquire , _InterlockedExchange_HLERelease |
x86, x64 | <immintrin.h> |
_InterlockedExchange64_HLEAcquire , _InterlockedExchange64_HLERelease |
x64 | <immintrin.h> |
Замечания
_InterlockedExchange
предоставляет встроенную поддержку компилятора для функции InterlockedExchange пакета SDK для Win32 Windows.
Существуют несколько вариантов _InterlockedExchange
, они различаются в зависимости от типов данных, которые включают, и от того, используется ли семантика получения или освобождения конкретного процессора.
Функция _InterlockedExchange
работает с 32-разрядными целыми значениями, _InterlockedExchange8
работает с 8-разрядными целыми значениями, _InterlockedExchange16
работает с 16-разрядными целыми значениями и _InterlockedExchange64
работает с 64-разрядными целыми значениями.
На платформах ARM используются встроенные функции с суффиксами _acq
и _rel
для получения и освобождения семантики, например, в начале и конце критической секции. Встроенные компоненты с суффиксом _nf
("без забора") не действуют в качестве барьера памяти.
На платформах Intel ®, поддерживающих инструкции Hardware Lock Elision (HLE), встроенные функции с суффиксами _HLEAcquire
и _HLERelease
включают подсказку процессору, как можно повысить производительность, устраняя шаг записи с блокировкой оборудования. Если эти встроенные функции вызываются на платформах, не поддерживающих HLE, подсказка игнорируется.
Эти процедуры доступны только как встроенные объекты.
Пример
Пример использования _InterlockedExchange
см. в _InterlockedDecrement.
Завершение блока, относящегося только к системам Майкрософт
См. также
Встроенные компоненты компилятора
Ключевые слова
Конфликты с 32-разрядным (x86) компилятором