ExInterlockedAddUlong 函数 (wdm.h)

ExInterlockedAddUlong 例程将无符号长值作为原子作添加到给定无符号整数。

语法

ULONG ExInterlockedAddUlong(
  [in, out] PULONG      Addend,
  [in]      ULONG       Increment,
  [in, out] PKSPIN_LOCK Lock
);

参数

[in, out] Addend

指向一个无符号长整数的指针,其值将由 增量 值进行调整。

[in] Increment

指定要添加的无符号长整数。

[in, out] Lock

指向旋转锁的指针,用于同步对 附录的访问。

返回值

ExInterlockedAddUlong 返回 附录的原始值

言论

请考虑使用 InterlockedExchangeAdd 而不是此例程。 InterlockedExchangeAdd 可以更高效,因为它不使用旋转锁,并且由编译器内联。

假定支持执行互锁作的例程无法导致页面错误。 也就是说,他们的代码和他们触摸的任何数据都可能导致页面错误,而不会降低系统。 它们使用旋转锁在对称多处理器计算机上实现原子性。 调用方必须为 Lock提供驻留存储,该存储必须在初始调用 ExInterlockedXxx之前使用 KeInitializeSpinLock 进行初始化。

传递给 ExInterlockedAddULong 用于确保 加载项 上的添加作相对于与同一旋转锁同步的相同值的任何其他作都是原子的。

ExInterlockedAddUlong 掩码中断。 因此,它可用于 ISR 和其他驱动程序代码之间的同步,前提是在对 IRQL = DISPATCH_LEVEL 运行的例程的调用中永远不会重复使用同一 锁定

请注意,保证对 InterlockedXxx 的调用与其他 InterlockedXxx 调用是原子的,无需调用方提供的旋转锁。

ExInterlockedAddUlong 调用方在任何 IRQL 上运行。 附录 参数的存储必须驻留在所有 IRCL 中。

要求

要求 价值
最低支持的客户端 从 Windows 2000 开始可用。
目标平台 普遍
标头 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 任何级别 (请参阅“备注”部分)

另请参阅

ExInterlockedAddLargeInteger

InterlockedDecrement

InterlockedIncrement

KeInitializeSpinLock