_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
);

参数

Target
[in,out] 指向要交换值的指针的指针。 函数将值设置为并返回之前的值。


[in] 要与由目标指向的值交换的值。

返回值

函数返回由目标指向的初始值。

要求

Intrinsic 体系结构 Header
_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 位边界上对齐。 有关详细信息,请参阅 align

ARM 平台上,如果需要(例如在临界区的起点和终点)获取和发布语义,可以使用带 _acq_rel 后缀的函数。 带 _nf(“无围墙”)后缀的内部函数不能充当内存屏障。

在支持硬件锁省略 (HLE) 指令的 Intel 平台,带 _HLEAcquire_HLERelease 后缀的内部函数包括一个发送到处理器的提示,可以通过消除硬件中的锁写步骤来提升速度。 如果在不支持 HLE 的平台上调用这些内部函数,则忽略此提示。

这些例程只能用作内部函数。

结束 Microsoft 专用

另请参阅

编译器内部函数
与 x86 编译器冲突