이벤트(Event Kernel Object)를 이용한 커널 모드 동기화  시스템프로그래밍 

2013.04.17. 13:13  수정  삭제

복사http://blog.naver.com/pwk0810/40187267107

전용뷰어 보기

 

  • 특정 쓰레드를 우리가 원하는 시점에서 대기 상태에서 실행 상태로 바꿀수 있다.
  • 한개의 쓰레드만이 아니라 여러개의 쓰레드들을 동시에 실행 상태로 바꿀수 있다.
  • 커널에서 프로그램으로 어떤 신호를 알려줄 때에도 많이 사용

Auto-Reset  Mode

 

  • 신호 받음 상태 (signaled)) 상태가 되었을때 곧바로 Non-Signaled 상태로 바뀌는 모드
  • 여러개의 쓰레드가 동시에 같은 자동 리셋 모드의 이벤트를 대기하고 있는 중에 신호 받음 상태가 될 때
    • 어떤 쓰레드들 중 실행상태가 될지는 알 수 없다. 
Manual-Reset Mode
  • 신호 받음 상태가 되었을때 자동 리셋 모드와 같이 자동으로 신호 못받음 상태로 바뀌지 않기 때문에 사용자가 ResetEvent() 함수를 호출하여 신호 못받음 상태로 바꿔줘야 한다.
  • 대기하는 여러개의 스레드가 동시에 수동 리셋 모드 이벤트를 대기 중에 신호 받음 상태가 된다면 대기하고 있던 모든 쓰레드들이 실행 상태로 바뀌게 된다.
  • 어러개의 쓰레드가 동시에 수동 리셋 모드 이벤트를 대기하고 있는 중에 신호 받음 상태가 된다면 대기하고 있던 모드 쓰레드들이 실행 상태로 바뀌게 된다.
  • Auto-Reset모드와의 차이점이다.

자동 리셋 모드와 수동 리셋 모드의 차이점이다.


CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,   // 보안 속성
BOOL bManualReset,       // TRUE 수동 리셋  ,  FALSE 
BOOL bInitiaState,           // 이벤트 객체 초기 상태 FALSE : non-signaled
LPCTSTR lpName )


SetEvent(HANDLE hEvent) ;    // 지정된 이벤트 객체를 신호 받음 상태로 바꾸는 역할
ResetEvent(HANDLE hEvent); // 지정된 이벤트 객체를 신호 못받음 상태로 바꾸는 역할
PulseEvent(HANLDE hEvent); // 지정된 이벤트를 신호받음 상태로 바꾸었다가 곧바도 신호 못받                                          // 음 상태로 바꿈


'SYSTEM PROGRAMMING' 카테고리의 다른 글

세마포어(Semaphore) 기반의 동기화  (0) 2015.08.05
Mutex 기반 동기화  (0) 2015.08.05
객체 상태별 종류  (0) 2015.08.05
채널서버  (0) 2015.08.05
Event ( Auto-Reset) 모드와 ( Manual-Reset) 모드  (0) 2015.08.05
Posted by 뉴암스테르담
l