쓰레드(Thread) 실행순서 동기화 _System Programming

이벤트(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. 소비자간의 임계 영역에 뮤텍스(임계 영역 동기화 기법)로 동기화 한다. (메모리 접근 동기화)


덧글

댓글 입력 영역


통계 위젯 (블랙)

85
32
54502

블로그 랭킹 위젯

마우스오른쪽금지