1. 이벤트(Event)
순차적으로 수행해야 하는 작업을 두 개 이상의 스레드로 수행할 경우에 사용함
- 단일 스레드
CEvent g_Event;
UINT Thread01(LPVOID pParam)
{
while(TRUE)
{
g_Event.Lock();
...
}
}
// Lock을 푸는 방법
g_Event.SetEvent();
- 두 개 이상의 스레드
CEvent g_Event(FALSE, TRUE);
UINT Thread01(LPVOID pParam)
{
while(TRUE)
{
g_Event.Lock();
...
}
}
// Lock을 푸는 방법
g_Event.SetEvent();
g_Event.ResetEvent();
2. 크리티컬 섹션(Critical Section)
스레드가 두 개 이상의 리소스를 공유할 때 동시에 소스에 접근하지 못하게 할 경우에 사용함
단일 프로세스의 스레드에 대해서만 동작함
CCriticalSection g_CriticalSection
UINT Thread01(LPVOID pParam)
{
while(TRUE)
{
g_CriticalSection.Lock();
...
g_CriticalSection.Unlock();
}
}
또는
CRITICAL_SECTION cs;
EnterCriticalSection(&cs);
...
LeaveCriticalSection(&cs);
3. 뮤텍스(Mutex)
크리티컬 섹션과 동일한 개념이지만 뮤텍스는 여러 프로세스의 스레드에 대해서도 동작함.
차이점
크리티컬 섹션 : 한 프로세스 내부의 스레드간들이 접근하는 리소스에 대해서만 접근 방지
뮤텍스 : 두 프로세스 내부의 스레드들간이 접근하는 리소스에 대해서도 접근 방지
4. 세마포어(Semaphore)
세마포어는 크리티컬 섹션과 다르게 한 리소스에 접근할 수 있는 스레드의 수를 설정 가능함
CSemaphore g_semaphore(2,2); // 인수 1 : 리소스 카운터 초기 값, 인수 2 : 리소스 카운터의 최대 값
UINT Thread01(LPVOID pParam)
{
while(TRUE)
{
g_semaphore.Lock();
...
g_semaphore.Unlock();
}
}
'Devlopment > C,C++,Ruby,Python' 카테고리의 다른 글
[VC++] Debug모드와 Release모드 (0) | 2010.04.15 |
---|---|
[VC++] 레지스트리 삭제 (저장된 설정 삭제 방법) (0) | 2010.04.13 |
[VC++] 비트맵 출력 (0) | 2010.04.13 |
[VC++] 맵 사용방식 (0) | 2010.04.09 |
[VC++] Extern과 Const (0) | 2010.04.07 |
[VC++] 다이어로그(Dialog) 도킹(Docking) 하기 (2) | 2010.03.25 |
[VC++] 파일 입출력시 버퍼 크기 문제 (0) | 2010.03.16 |
[VC++] 쓰레드 (0) | 2010.03.16 |
VC++ 변수 표기법 (0) | 2010.03.12 |
VC++ Data Type (0) | 2010.03.12 |