Search
Duplicate
🏆

커널 객체를 이용한 쓰래드 동기화(1) - 기본 사항

Category
as S/W 엔지니어
Tags
C++
Programming Applications for Microsoft Windows
thread synchronization
쓰래드 동기화
Created time
2004/10/25
제프리 릭터의 Programming Applications for Microsoft Windows. (4th Editon) 에 담긴 내용입니다.
커널 객체(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++
복사