KeSrcuSynchronize 函数 (wdm.h)

KeSrcuSynchronize 例程会等待,直到已退出可睡眠读取Copy-Update(SRCU)分区的所有当前活动读取端关键部分。

Syntax

VOID KeSrcuSynchronize(
  [in] PKE_SRCU Rcu
);

参数

[in] Rcu

指向 以前由 KeSrcuAllocate 分配的 SRCU 实例的指针。

返回值

None

注解

KeSrcuSynchronize 实现 SRCU 的“同步”作,这会启动宽限期,并等待所有当前处于活动状态的读取器退出其关键部分。 此函数对于安全内存回收和数据结构更新至关重要。

宽限期语义如下所示:

  • 该函数仅等待调用时处于活动状态的读取器。
  • 呼叫开始后输入的新读取器不包括在等待中。
  • 该函数可能会阻止,直到所有目标读取器都调用 KeSrcuReadUnlock
  • 多个同步作可以同时进行。

仅在 IRQL < DISPATCH_LEVEL调用此函数,因为它可能会阻止。 此函数可以休眠,使其适合可分页代码。 请勿从 SRCU 读取端关键部分内调用此函数。

典型的编写器模式如下所示:

  1. 从全局可见性中删除数据结构。
  2. 调用 KeSrcuSynchronize 以等待现有读取器。
  3. 安全地解除分配或修改数据结构。

该函数可确保在返回数据时没有读取器访问数据,因此可以安全地执行更新或内存回收。

要求

Requirement 价值
目标平台 普遍
Header wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
Library NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <DISPATCH_LEVEL

另请参阅

KeSrcuAllocate

KeSrcuFree

KeSrcuReadLock

KeSrcuReadUnlock