•
커널 객체(kernel object)는 사용자 모드(user mode)의 메카니즘보다 훨씬 더 유용하더라..
◦
사실 사용자 모드의 것보다 딸리는 점이라고는 성능밖에 없더라..(커널 객체를 다루는 함수는 반드시 사용자 모드에서 커널 모드로 전이(transition)하게 된다. 이 전이에서 성능 저하가 일어난다.)
•
쓰래드 동기화에서 거의 대부분의 커널 객체는 신호 상태(signaled state)가 아니면 비신호 상태(unsignaled state)에 놓이게 되더라..
•
쓰래드 동기화를 위해 윈도우즈가 제공하는 커널 객체 : 이벤트(event), 대기가능 타이머(waitable timer), 세마포어(semaphore), 뮤텍스(mutex)
•
Wait 함수 : 쓰래드로 하여금 자의적으로 대기(wait) 상태로 들어가게 하더라.. (특정 커널 객체가 신호상태가 될 때까지)
//객체 하나에 대해서 대기
DWORD WaitForSingleObject(
HANDLE hObject,
DWORD dwMilliseconds);
//여러 객체에 대해서 대기
DWORD WaitForMultipleObjects(
DWORD dwCount,
CONST HANDLE* phObjects,
BOOL fWaitAll,
DWORD dwMilliseconds);
// fWaitAll : TRUE일 경우, 모든 커널 객체가 신호 상태가 될 경우에만 호출자 쓰래드가 실행된다. FALSE일 경우에는 커널 객체중 하나만이라도 신호 상태가 되면 호출자 쓰래드가 실행된다.
// 반환 값
// WAIT_OBJECT_0, WAIT_TIMEOUT, WAIT_FAILED
C++
복사