2011-06-14 4 views

답변

3

매우 큰 차이가 있습니다. KeReadStateSemaphore은 단순히 세마포어의 상태를 반환하지만 대기 시간이 만족되면 (즉, 부작용이 신호 상태를 감소시키는 경우) 시간 초과가 0 인 KeWaitForSingleObject은 실제로 부작용을 처리합니다. 전자를 사용하여 폴링하고, 후자를 사용하여 기다리지 않고 세마포를 획득하려고 시도하십시오.

+0

스레드 A가 KeWaitForSingleObject를 호출하고 세마포어를 해제하지 않은 경우 스레드 B가 0으로 설정된 KeWaitForSingleObject를 호출하고 세마포를 획득 할 수 있습니까? 스레드 A에서 KeReleaseSemaphore를 호출하면 어떤 효과가 있습니까? – lalli

+0

@lalli : 아니요, 첫 번째 스레드가 세마포어를 해제하지 않은 경우 두 번째 스레드가 KeWaitForSingleObject를 호출 할 때 아무 것도 발생하지 않습니다. 릴리스 될 때 아무 스레드도 세마포어에서 대기 중이므로 아무 것도 발생하지 않습니다. – wj32