제프리 릭터의 Programming Applications for Microsoft Windows에 담긴 내용입니다.

  • 커널 객체(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
  • Posted by 어쨌건간에