이벤트(Event Kernel Object)를 이용한 커널 모드 동기화 ![]() ![]()
|
- 특정 쓰레드를 우리가 원하는 시점에서 대기 상태에서 실행 상태로 바꿀수 있다.
- 한개의 쓰레드만이 아니라 여러개의 쓰레드들을 동시에 실행 상태로 바꿀수 있다.
- 커널에서 프로그램으로 어떤 신호를 알려줄 때에도 많이 사용
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 |