KeReleaseMutex 함수(wdm.h)
KeReleaseMutex 루틴은 뮤텍스 개체를 해제하고 KeReleaseMutex가 컨트롤을 반환하는 즉시 호출자가 KeWaitXxx 루틴 중 하나를 호출할지 여부를 지정합니다.
구문
LONG KeReleaseMutex(
[in, out] PRKMUTEX Mutex,
[in] BOOLEAN Wait
);
매개 변수
[in, out] Mutex
호출자가 스토리지를 제공하는 초기화된 뮤텍스 개체에 대한 포인터입니다.
[in] Wait
KeReleaseMutex 호출 바로 뒤에 KeWaitXxx 루틴 중 하나를 호출할지 여부를 지정합니다. TRUE이면 KeReleaseMutex 호출 뒤에 KeWaitForMultipleObjects, KeWaitForMutexObject 또는 KeWaitForSingleObject를 호출해야 합니다. 자세한 내용은 아래 설명 부분을 참조하십시오.
반환 값
반환 값이 0이면 뮤텍스 개체가 해제되어 신호 상태가 됩니다.
설명
성능을 향상시키려면 빠른 뮤텍스 또는 보호된 뮤텍스를 사용합니다. 자세한 내용은 뮤텍스 개체의 대안을 참조하세요.
뮤텍스 개체가 신호 상태가 되면 뮤텍스 개체에 대한 대기를 충족하려고 시도합니다.
뮤텍스 개체는 현재 뮤텍스를 보유하는 스레드에서만 해제할 수 있습니다. 스레드가 보유하지 않는 뮤텍스를 해제하려고 시도하거나 IRQL = DISPATCH_LEVEL 뮤텍스를 획득하고 스레드가 DISPATCH_LEVEL 실행되지 않는 경우(또는 그 반대의 경우) 루틴은 STATUS_ABANDONED 또는 STATUS_MUTEX_NOT_OWNED 예외를 발생합니다.
뮤텍스 개체가 신호 상태가 되면 해당 스레드에서 보유하는 뮤텍스 목록에서 제거됩니다. 이 목록에 항목이 더 이상 없으면 스레드의 원래 우선 순위가 복원됩니다.
KeReleaseMutex 루틴으로 인해 IRQL이 일시적으로 발생할 수 있습니다. Wait 매개 변수가 FALSE이면 루틴이 반환되기 전에 IRQL을 호출 시작 시 원래 값으로 복원합니다.
WAIT = TRUE이면 IRQL을 낮추지 않고 루틴이 반환됩니다. 이 경우 KeReleaseMutex 호출 바로 뒤에 KeWaitXxx 호출이 와야 합니다. 대기 = TRUE를 설정하면 호출자가 KeReleaseMutex 호출과 KeWaitXxx 호출 간에 불필요한 컨텍스트 전환이 발생하지 않도록 방지할 수 있습니다. KeWaitXxx 루틴은 반환되기 전에 KeReleaseMutex 호출을 시작할 때 IRQL을 원래 값으로 복원합니다. IRQL은 두 호출 간의 컨텍스트 전환을 사용하지 않도록 설정하지만 이러한 호출은 원자성 작업의 시작과 끝으로 안정적으로 사용할 수 없습니다. 예를 들어 이러한 두 호출 사이에 다른 프로세서에서 동시에 실행되는 스레드는 이벤트 개체의 상태 또는 대기 대상의 상태를 변경할 수 있습니다.
호출자가 IRQL = DISPATCH_LEVEL 또는 임의의 스레드 컨텍스트에서 실행되는 경우 KeWaitXxx에 대한 Timeout 매개 변수는 0이어야 합니다.
뮤텍스를 재귀적으로 획득하는 경우 보류 스레드는 뮤텍스를 획득한 횟수만큼 KeReleaseMutex 를 호출하여 신호 상태로 설정해야 합니다.
뮤텍스 개체에 대한 자세한 내용은 뮤텍스 개체를 참조하세요.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 유니버설 |
헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), IrqlKeDispatchLte(wdm) |