ExInitializePushLock 函数 (wdm.h)

初始化推送锁变量。

语法

void ExInitializePushLock(
  [Out] PEX_PUSH_LOCK PushLock
);

参数

[Out] PushLock

指向调用方提供的存储的指针,该存储必须至少为 sizeof(EX_PUSH_LOCK),才能初始化推送锁变量。 存储必须在 32 位平台上对齐 4 字节,并且 64 位平台上对齐 8 字节。

返回值

没有

言论

推送锁类似于 ERESOURCE 结构(也称为“资源”),方法如下:

  • 推送锁可用于一组线程的同步。
  • 可以获取推送锁进行共享或独占访问。
  • 尽管调用方为推送锁变量提供存储,但EX_PUSH_LOCK结构不透明:即,其成员保留供系统使用。

推送锁在 ERESOURCE 结构上具有以下优势:

  • 当推送锁主要用于共享访问时,它们比 ERESOURCE 结构更高效。
  • 可以从分页池或非分页池分配推送锁的存储。 只能从非分页池分配 ERESOURCE 结构。
  • EX_PUSH_LOCK结构比 ERESOURCE 结构小得多。

与 ERESOURCE 结构相比,推送锁具有以下缺点:

  • 授予独占访问权限的算法对所有线程都不公平。 如果存在高级别的独占锁争用,则无法保证线程将被授予独占访问权限的顺序。
  • 没有用于确定推送锁的当前所有者的支持例程。 (ERESOURCE 结构的用户可以调用例程,如 ExIsResourceAcquiredExclusiveLite,以确定当前线程是否具有对资源的独占访问权限。
  • 无法以递归方式获取推送锁。

若要获取或释放推送锁进行独占访问,请分别调用 ExAcquirePushLockExclusiveExReleasePushLockExclusive

若要获取或释放用于共享访问的推送锁,请分别调用 ExAcquirePushLockSharedExReleasePushLockShared

要求

要求 价值
最低支持的客户端 Windows 10 版本 1809
标头 wdm.h