Mutex 기반 동기화 ![]() ![]()
|
- 커널 모드 동기화 방법
- 유저 모드에 비하면 느리다 ( 커널 모드 -> 유저모드 -> 커널 모드로 변환되어야 한다 )
- 유저모드에서 제공받지 못하는 기능을 제공받는다.
- 그러나 느리다. 그래서 게임 서버에서는 거의 사용하지 않는다.
- 뮤텍스는 기본적으로 자동 리셋 모드로 동작한다.
- bInitialOwner: FALSE(크리티컬 섹션처럼 먼저 차지하는 사람이 임자 )
- bInitialOwner : TRUE (뮤텍스를 생성하는 쓰레드가 먼저 기회를 얻는다 )
- 대기하고 있는 스레드중 어떤 쓰레드가 실행 상태로 바뀌게 될지 알수 없다는 의미이다.
- 실행순서를 동기화한다는 측면에서의 접근은 역시 모호?
- 누군가에 의해 획득될때 sIgnaled 상태에 놓인다.
- WaitForSingleObject 함수를 통해서 임계 영역에 진입을 위한 뮤텍스 획득 용도로 사용된다.
- 인자로 전달된 핸들의 커널 오브젝트가 Signaled 상태가 되어서 반환하는 경우, 해당 커널 오브젝트를 Non-Signaled 상태로 변경함.
CreateMutex( LPSECURITY_ATTIRBUTES lpMutexAttributes,
BOOL bInitialOwner,
LPCSTR lpName )
ReleaseMutex(hMutex) : 뮤텍스를 반환할 때
CloseHandle() : 리소스 해제, 핸들 반환
'SYSTEM PROGRAMMING' 카테고리의 다른 글
윈도우즈 기반 I/O 모델 (0) | 2015.08.05 |
---|---|
세마포어(Semaphore) 기반의 동기화 (0) | 2015.08.05 |
이벤트(Event Kernel Object)를 이용한 커널 모드 동기화 (0) | 2015.08.05 |
객체 상태별 종류 (0) | 2015.08.05 |
채널서버 (0) | 2015.08.05 |