블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
1. Critical Section (임계구역)   
   - 접근 가능한 스레드는 하나
   - 동기화는 하나의 프로세스 안에서만 이루어진다
   - 예) 단일 프로세스 상에서의 접근

2. Mutex (상호배제)
   - 접근 가능한 스레드는 하나
   - 여러 프로세스에서 하나의 자원에 접근하는 경우에 사용된다
   - 예) 다중 프로세스 상에서의 접근

3. Event (이벤트)
   - Mutex와 거의 동일하다
   - 접근 제어 보다는 특정 상황이 발생될 때 이를 알리는 목적으로 사용된다
   - 예) 특정 상황에서 발생되는 접근

4. Semaphore (세마포어)
  - 하나의 자원에 접근할 수 있는 프로세스의 수를 지정할 수 있다
  - 예) 동접자 제한 등

[출처] 동기화 객체|작성자 아스라이



1. 뮤텍스(Mutex) : 커널

모든 thread에 사용될 수 있는 동기화 객체.

mutex를 신호상태로 생성하고 thread에서 wait함수를 호출하면 비신호 상태가 된다. 즉 다른 thread에서 접근 불가.

ReleaseMutex를 사용하여 다시 신호상태로 돌릴 수 있다.

프로그램 중복 실행을 방지하기 위해 사용되기도 한다.

//////////////////////////////////////////////////////////////////////////
 // 프로그램 중복 실행 방지

 HANDLE hMutex = CreateMutex( NULL, FALSE, "MyProject" );
 if(GetLastError() == ERROR_ALREADY_EXISTS)
 {
  return FALSE;
 }

 
2. 크리티컬섹션(Critical section) : 유저

같은 프로세스내에 사용될 수 있는 동기화 객체.

EnterCriticalSection으로 비신호, LeaveCriticalsection으로 신호 상태가 된다.

LeaveCriticalSection 사용하면 다른 thread의 접근이 가능하다.

 
3. 세마 포어(Semaphore) : 커널

뮤텍스와 비슷하다. 하지만 접근 가능한 thread의 개수를 지정할 수 있다.

세마포어는 내부적으로 카운트를 가지고 있는데, wating thread가 있으면 카운트가 하나씩 줄어든다.

그리고 그 카운트가 0이 되면 비신호 상태가 되어 다른 thread에서 접근이 불가능하다.

ReleaseSemaphore 사용 시 카운트가 1 증가하여 다른 threa에서 접근이 가능해진다.

WaitforSingleObject 처럼 thread를 정지시키는 효과를 부여하기 위해 모든 thread를 비신호 상태로 만들기도 한다.


반응형
Posted by blueasa
, |