이벤트(Event) 기반 동기화 :
개념 :
생산자는 문자열을 생성한다(입력받는다), 소비자는 문자열을 소비한다(출력한다)
생산자가 문자열을 생성하고 나면, 이 상태를 감지한 소비자가 문자열을 가져가 소비한다.
이벤트 커널 오브젝트의 특성 :
1. 이벤트 커널 오브젝트는 파라미터에 의해 Signaled or Non-Signaled 상태로 생성된다.
2. 프로그래머의 요청에 의해 Signaled 상태가 된다.
3. 자동 리셋 모드 일시 WaitForSingleObject 함수 호출로 Signaled -> Non-Signaled 상태로 변경된다.
수동 리셋 모드 일시 추가로 ResetEvent 함수를 사용한다.
사용법 :
HANDLE CreateEvent(
LPSECURITY_ATTRIBUTES lpEventAttributes, // 보안속성
BOOL bManualReset, // TRUE : 수동 리셋 모드(Manual-Reset)
// FALSE : 자동 리셋 모드(Auto-Reset)
BOOL bInitialState, // TRUE : Signaled 상태의 이벤트 커널 오브젝트 생성
// FALSE : Non-Signaled 상태의 이벤트 커널 오브젝트 생성
LPCTSTR lpName // 이벤트 커널 오브젝트의 이름(NULL : 이름없는 이벤트 커널 오브젝트)
);
BOOL ResetEvent(
HANDLE hEvent // 이벤트 커널 오브젝트의 핸들 ( Non-Signaled 상태가 된다)
);
BOOL SetEvent(
HANDLE hEvent // 이벤트 커널 오브젝트의 핸들 (Signaled 상태가 된다)
);
CloseHandle() 함수로 핸들을 반환하여 끝낸다.
이벤트(Event) + 뮤텍스(Mutex) :
개념 :
생산자 하나에 소비자가 둘이다.
생산자가 생산하고 나면 소비자 둘은 동기화를 통해 소비해야 한다.
사용법 :
1. 생산자와 소비자간의 이벤트 기반 동기화를 한다. (실행순서 동기화)
2. 소비자간의 임계 영역에 뮤텍스(임계 영역 동기화 기법)로 동기화 한다. (메모리 접근 동기화)
'Windows > _System Programming' 카테고리의 다른 글
쓰레드(Thread) 동기화 예제 소스 (0) | 2010.03.06 |
---|---|
쓰레드(Thread) 동기화 개념 (0) | 2010.03.04 |
쓰레드(Thread) 메모리 접근 동기화 (0) | 2010.03.04 |
쓰레드(Thread)의 생성과 소멸 (0) | 2010.02.28 |
쓰레드(Thread) (2) | 2010.02.28 |