KeSrcuSynchronize 例程会等待,直到已退出可睡眠读取Copy-Update(SRCU)分区的所有当前活动读取端关键部分。
Syntax
VOID KeSrcuSynchronize(
[in] PKE_SRCU Rcu
);
参数
[in] Rcu
指向 以前由 KeSrcuAllocate 分配的 SRCU 实例的指针。
返回值
None
注解
KeSrcuSynchronize 实现 SRCU 的“同步”作,这会启动宽限期,并等待所有当前处于活动状态的读取器退出其关键部分。 此函数对于安全内存回收和数据结构更新至关重要。
宽限期语义如下所示:
- 该函数仅等待调用时处于活动状态的读取器。
- 呼叫开始后输入的新读取器不包括在等待中。
- 该函数可能会阻止,直到所有目标读取器都调用 KeSrcuReadUnlock。
- 多个同步作可以同时进行。
仅在 IRQL < DISPATCH_LEVEL调用此函数,因为它可能会阻止。 此函数可以休眠,使其适合可分页代码。 请勿从 SRCU 读取端关键部分内调用此函数。
典型的编写器模式如下所示:
- 从全局可见性中删除数据结构。
- 调用 KeSrcuSynchronize 以等待现有读取器。
- 安全地解除分配或修改数据结构。
该函数可确保在返回数据时没有读取器访问数据,因此可以安全地执行更新或内存回收。
要求
| Requirement | 价值 |
|---|---|
| 目标平台 | 普遍 |
| Header | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
| Library | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | <DISPATCH_LEVEL |