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


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

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

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

Синтаксис

long _InterlockedXor(
   long volatile * Value,
   long Mask
);
long _InterlockedXor_acq(
   long volatile * Value,
   long Mask
);
long _InterlockedXor_HLEAcquire(
   long volatile * Value,
   long Mask
);
long _InterlockedXor_HLERelease(
   long volatile * Value,
   long Mask
);
long _InterlockedXor_nf(
   long volatile * Value,
   long Mask
);
long _InterlockedXor_np(
   long volatile * Value,
   long Mask
);
long _InterlockedXor_rel(
   long volatile * Value,
   long Mask
);
char _InterlockedXor8(
   char volatile * Value,
   char Mask
);
char _InterlockedXor8_acq(
   char volatile * Value,
   char Mask
);
char _InterlockedXor8_nf(
   char volatile * Value,
   char Mask
);
char _InterlockedXor8_np(
   char volatile * Value,
   char Mask
);
char _InterlockedXor8_rel(
   char volatile * Value,
   char Mask
);
short _InterlockedXor16(
   short volatile * Value,
   short Mask
);
short _InterlockedXor16_acq(
   short volatile * Value,
   short Mask
);
short _InterlockedXor16_nf (
   short volatile * Value,
   short Mask
);
short _InterlockedXor16_np (
   short volatile * Value,
   short Mask
);
short _InterlockedXor16_rel(
   short volatile * Value,
   short Mask
);
__int64 _InterlockedXor64(
   __int64 volatile * Value,
   __int64 Mask
);
__int64 _InterlockedXor64_acq(
   __int64 volatile * Value,
   __int64 Mask
);
__int64 _InterlockedXor64_HLEAcquire(
   __int64 volatile * Value,
   __int64 Mask
);
__int64 _InterlockedXor64_HLERelease(
   __int64 volatile * Value,
   __int64 Mask
);
__int64 _InterlockedXor64_nf(
   __int64 volatile * Value,
   __int64 Mask
);
__int64 _InterlockedXor64_np(
   __int64 volatile * Value,
   __int64 Mask
);
__int64 _InterlockedXor64_rel(
   __int64 volatile * Value,
   __int64 Mask
);

Параметры

Value
[in, out] Указатель на первый операнду, который необходимо заменить результатом.

Маска
[in] Второй операнд.

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

Исходное значение первого операнда.

Требования

Intrinsic Архитектура Верхний колонтитул
_InterlockedXor, , _InterlockedXor8_InterlockedXor16 x86, ARM, x64, ARM64 <intrin.h>
_InterlockedXor64 ARM, x64, ARM64 <intrin.h>
_InterlockedXor_acq, _InterlockedXor_nf, _InterlockedXor_rel_InterlockedXor8_acq_InterlockedXor8_nf_InterlockedXor8_rel_InterlockedXor16_acq_InterlockedXor16_nf_InterlockedXor16_rel_InterlockedXor64_acq_InterlockedXor64_nf_InterlockedXor64_rel ARM, ARM64 <intrin.h>
_InterlockedXor_np, , _InterlockedXor8_np_InterlockedXor16_np_InterlockedXor64_np x64 <intrin.h>
_InterlockedXor_HLEAcquire, _InterlockedXor_HLERelease x86, x64 <immintrin.h>
_InterlockedXor64_HLEAcquire, _InterlockedXor64_HLERelease x64 <immintrin.h>

Замечания

Число в имени каждой функции указывает разрядность аргументов.

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

Встроенные функции с суффиксом _np («нет упреждающей выборки") запрещают возможную вставку компилятором операции упреждающей выборки.

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

Пример

// _InterLockedXor.cpp
#include <stdio.h>
#include <intrin.h>

#pragma intrinsic(_InterlockedXor)

int main()
{
        long data1 = 0xFF00FF00;
        long data2 = 0x00FFFF00;
        long retval;
        retval = _InterlockedXor(&data1, data2);
        printf_s("0x%x 0x%x 0x%x", data1, data2, retval);
}
0xffff0000 0xffff00 0xff00ff00

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

См. также

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