KeRcuSynchronize 函数等待宽限期在默认 RCU(Read-Copy-Update) 域中运行,确保所有预先存在的 RCU 读取端关键部分都已完成。
Syntax
VOID KeRcuSynchronize();
返回值
None
注解
KeRcuSynchronize 是一种阻塞作,它使用内核门对象等待宽限期。 必须在 IRQL < DISPATCH_LEVEL(通常是PASSIVE_LEVEL)调用它,因为它可能导致调用线程挂起。
此函数会阻止调用线程,直到调用时处于活动状态的所有 RCU 读取端关键部分都已退出。 它为编写器提供一个同步点,用于安全地回收或修改受 RCU 保护的数据结构。
KeRcuSynchronize 保证:
- 在调用 KeRcuSynchronize 之前开始的所有 RCU 只读关键部分将在函数返回之前完成。
- 在此函数返回后,可以安全地回收受 RCU 保护的内存或数据结构。
- 在 KeRcuSynchronize 启动后开始的新读取器可能等待或可能不会等待。
此函数通常用于更新端代码路径,调用方需要确保在安全回收或修改数据结构之前,所有读取器都已完成访问数据结构。
函数不失败。 它始终会成功完成,并且无法返回错误。
对于需要自定义同步域的更复杂的方案,请将 KeSrcuSynchronize 与显式 SRCU 分区配合使用。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | Windows 11,版本 24H2 |
| 支持的最低服务器 | Windows Server 2025 |
| 目标平台 | 普遍 |
| Header | wdm.h (包括 Wdm.h) |
| Library | NtosKrnl.lib |
| IRQL | <= APC_LEVEL |