CriticalSection : 하나의 Process에서 여러개의 Thread의 상호배제 구현
    선언 : CRITICAL_SECTION m_CrtSection;
    초기 :
    생성 : InitializeCriticalSectionAndSpinCount(&m_CrtSection, 2000);//Multi CPU를 지원 Spin Count를 추가 한다.
    진입 : EnterCriticalSection(&m_CrtSection);
    진출 : LeaveCriticalSection(&m_CrtSection);
    소멸 : DeleteCriticalSection(&m_CrtSection);

 

Mutex : 이름을 지정하여 여러개의 Process의 Thread에서도 상호배제 가능.Mutex는 동기화 대상이 오직 하나뿐일 때
    선언 : HANDLE m_hMutex;
    초기 : m_hMutex=NULL;
    생성 : m_hMutex=CreateMutex(NULL,FALSE,NULL); //OpenMutex()
    진입 : WaitForSingleObject(m_hMutex,INFINITE);
    진출 : ReleaseMutex(m_hMutex);
    소멸 : if(m_hMutex !=NULL ) CloseHandle(m_hMutex);

 

Semaphore : 여러 Process의 한가지 자원에 접근 배제.Semaphore는 동기화 대상이 하나 이상일 때 사용
    선언 : HANDLE m_hSemaphore;
    초기 : m_hSemaphore=NULL;
    생성 : m_hSemaphore= CreateSemaphore(
            NULL, // default security attributes
            3, // initial count. MAX_COUNT 10
            3, // maximum count. MAX_COUNT 10
            NULL); // unnamed semaphore

            WaitForMultipleObjects(5, &aThread[0], TRUE, INFINITE);
    진입 : dwWaitResult = WaitForSingleObject( 
            m_hSemaphore, // handle to semaphore
            0L); // zero-second time-out interval
            // Return value : 리턴값 ( dwWaitResult 에 저장되는 값 )
            // WAIT_ABANDONED 0x00000080L
            // WAIT_OBJECT_0 0X00000000L
            // WAIT_TIMEOUT 0x00000102L
            // WAIT_FAILED 0xFFFFFFFF(DWORD)
    진출 : ReleaseSemaphore(m_hSemaphore, // handle to semaphore
            1, // increase count by one
            NULL) ) // not interested in previous count

    소멸 : if(m_hSemaphore !=NULL ) CloseHandle(m_hSemaphore);

 

Event
    선언 : HANDLE m_hEvent;
    초기 : m_hEvent=NULL;
    생성 : m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); ResetEvent(m_hEvent);
    진입 : WaitForSingleObject(pDlg->m_hEvent, INFINITE);
    진출 : ResetEvent( hHandle );// 원하는 작업을 처리한다.
    소멸 : if(hHandle !=NULL ) CloseHandle(hHandle);
         

    이벤트 발생은 SetEvent(m_hEvent); //return value

        WAIT_FAILED : fail, GetLastError로 원인을 알수가 있다 이경우 logic을 빠져나간다
        WAIT_ABANDONED : 이 경우는 Event Object를 reset 하고 다시 WaitForSingleObject()를 호출한다
        WAIT_OBJECT_0 : 기다리던 Event가 signal 된 경우
        WATI_TIMEOUT : time-out 된 경우

+ Recent posts