InterlockedCompareExchange128 函数 (winnt.h)

对指定值执行原子比较和交换操作。 函数比较两个指定的 128 位值,并根据比较结果与另一个 128 位值交换。

若要对 16 位值进行操作,请使用 InterlockedCompareExchange16 函数。

若要对 32 位值进行操作,请使用 InterlockedCompareExchange 函数。

若要对 64 位值进行操作,请使用 InterlockedCompareExchange64 函数。

语法

BOOLEAN InterlockedCompareExchange128(
  [in, out] LONG64 volatile *Destination,
  [in]      LONG64          ExchangeHigh,
  [in]      LONG64          ExchangeLow,
  [in, out] LONG64          *ComparandResult
);

参数

[in, out] Destination

指向目标值的指针。 此参数是两个被视为 128 位字段的 64 位整数的数组。

[in] ExchangeHigh

交换价值的高部分。

[in] ExchangeLow

交换值的低部分。

[in, out] ComparandResult

要比较的值。 此参数是两个被视为 128 位字段的 64 位整数的数组。 在输出时,这会用目标的原始值覆盖。

返回值

如果 ComparandResult 等于 Destination 参数的原始值,则函数返回 1;如果 CompareandResult 不等于 Destination 参数的原始值,则函数返回 0。

注解

函数将 Destination 值与 CompareandResult 值进行比较:

  • 如果 Destination 值等于 CompareandResult 值, 则 ExchangeHighExchangeLow 值存储在 Destination 指定的数组中,也存储在 CompareandResult 指定的数组中。
  • 否则, 目标 未修改。
无论比较结果如何,原始 Destination 值都存储在 由 ComparandResult 指定的数组中。

此函数的参数必须在 16 字节边界上对齐;否则,函数在 x64 系统上的行为将不可预知。 请参阅 _aligned_malloc

互锁函数提供了一种简单的机制,用于同步对多个线程共享的变量的访问。 对于对其他互锁函数的调用,此函数是原子函数。

此函数仅在基于 x64 的系统上可用,并且它是使用编译器内部函数实现的。 有关详细信息,请参阅 WinBase.h 头文件和 _InterlockedCompareExchange128

此函数 (或围栏) 生成完整的内存屏障,以确保按顺序完成内存操作。

要求

要求
最低受支持的客户端 Windows 8 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 [仅限桌面应用]
目标平台 Windows
标头 winnt.h (包括 Windows.h)

另请参阅

互锁变量访问

InterlockedCompare64Exchange128

InterlockedCompareExchange

InterlockedCompareExchange16

InterlockedCompareExchange16Acquire

InterlockedCompareExchange16NoFence

InterlockedCompareExchange16Release

InterlockedCompareExchange64

InterlockedCompareExchangeAcquire

InterlockedCompareExchangeAcquire64

InterlockedCompareExchangeNoFence

InterlockedCompareExchangeNoFence64

InterlockedCompareExchangePointer

InterlockedCompareExchangePointerAcquire

InterlockedCompareExchangePointerNoFence

InterlockedCompareExchangePointerRelease

InterlockedCompareExchangeRelease

InterlockedCompareExchangeRelease64

同步函数