KeSrcuSynchronize 루틴은 SRCU(절전 모드 읽기-Copy-Update) 파티션에 대한 현재 활성 읽기 쪽 중요 섹션이 모두 종료될 때까지 대기합니다.
Syntax
VOID KeSrcuSynchronize(
[in] PKE_SRCU Rcu
);
매개 변수
[in] Rcu
이전에 KeSrcuAllocate에 의해 할당된 SRCU 인스턴스에 대한 포인터입니다.
반환 값
None
비고
KeSrcuSynchronize 는 유예 기간을 시작하고 현재 활성 상태인 모든 판독기가 중요한 섹션을 종료할 때까지 기다리는 SRCU에 대한 "동기화" 작업을 구현합니다. 이 함수는 안전한 메모리 매립 및 데이터 구조 업데이트에 필수적입니다.
유예 기간 의미 체계는 다음과 같습니다.
- 함수는 호출이 이루어졌을 때 활성 상태였던 판독기만 대기합니다.
- 통화가 시작된 후 입력하는 새 판독기는 대기에 포함되지 않습니다.
- 모든 대상 판독기가 KeSrcuReadUnlock을 호출할 때까지 함수가 차단될 수 있습니다.
- 여러 동기화 작업을 동시에 진행할 수 있습니다.
이 함수는 차단할 수 있으므로 IRQL < DISPATCH_LEVEL만 호출합니다. 이 함수는 절전 모드로 설정하여 페이지 가능 코드에 적합합니다. SRCU 읽기 쪽 중요 섹션 내에서 이 함수를 호출하지 마세요.
일반적인 기록기 패턴은 다음과 같습니다.
- 전역 표시 유형에서 데이터 구조를 제거합니다.
- KeSrcuSynchronize를 호출하여 기존 판독기를 기다립니다.
- 데이터 구조를 안전하게 할당 취소하거나 수정합니다.
이 함수는 반환할 때 판독기에서 데이터에 액세스하지 않도록 하므로 업데이트 또는 메모리 매립을 안전하게 수행할 수 있습니다.
요구 사항
| 요구 사항 | 가치 |
|---|---|
| 대상 플랫폼 | 보편적 |
| Header | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
| Library | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | <DISPATCH_LEVEL |