2011-10-12 2 views
0

필자는 ioctl 호출 내 드라이버에 몇 개의 스레드를 생성하고 있습니다. 드라이버에 커널 선호도를 지정합니다. 특정 이벤트가 다른 스레드에 의해 플래그가 지정 될 때까지 스레드 중 하나가 스케줄되지 않도록하고 싶습니다. 창 스케줄러가 내 스레드를 처리 할 수 ​​없게하는 방법이 있습니까? _disable()을 사용하면 이벤트가 몇 초가 걸릴 수 있으므로 시스템이 중단 될 수 있습니다.이벤트가 발생할 때까지 프로세서에 스레드를 유지하는 방법은 무엇입니까?

환경 창입니다 7,64bit

감사합니다,

후 스핀 락을입니다 당신이 아마

답변

2

. 그러나 드라이버/응용 프로그램이 항상 멀티 프로세서 시스템에서 실행되도록 보장 할 수 없다면 나쁜 생각 일 수 있습니다. 그렇더라도 여전히 매우 나쁜 습관입니다. 단일 프로세서 시스템에서 스레드가 스핀 잠금을하면 스핀 잠금 스레드를 신호하는 다른 스레드는 예약되지 않으므로 이벤트를 신호 할 수 없습니다. 스핀 잠금 장치는 아주 짧은 시간 동안 잠금 장치가 작동 될 때까지만 사용할 수 있습니다. 이벤트 또는 다른 신호 메커니즘을 사용하여 스레드를 동기화하고 Windows 스케줄러가 작업을 수행해야하는 것처럼 들립니다. 이벤트에 매우 빠르게 응답해야하는 경우 인터럽트 또는 지연 프로 시저 호출 (DPC)을 대신 사용할 수 있습니다.

관련 문제