아틴
Atin
아틴
전체 방문자
오늘
어제
  • 분류 전체보기 (460)
    • Devlopment (246)
      • 정리 글 (20)
      • MicroServices (0)
      • Reactive, Concurrenc.. (12)
      • Java (44)
      • Spring (20)
      • C,C++,Ruby,Python (52)
      • Mobile (39)
      • Web (35)
      • Tip & Info (14)
      • Unit Test (7)
    • Infra (44)
      • OS (21)
      • RDBMS (13)
      • NoSQL&Cache (5)
      • AWS (4)
    • Computer Science (11)
    • Etc (156)

블로그 메뉴

  • Home
  • Guestbook

공지사항

인기 글

태그

  • javascript
  • Ruby on Rails
  • Python
  • 아이폰
  • Dungeons & Dragons
  • Linux
  • 자바
  • 안드로이드
  • CSS
  • Android
  • 던젼 앤 드래곤즈
  • mysql
  • Java
  • 해킨토시
  • jsp
  • 전라도
  • C
  • 정읍
  • TRPG
  • 여행

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
아틴

Atin

Devlopment/C,C++,Ruby,Python

[VC++] 스레드(Thread) 동기화

2010. 4. 1. 14:36
반응형


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
    'Devlopment/C,C++,Ruby,Python' 카테고리의 다른 글
    • [VC++] 맵 사용방식
    • [VC++] Extern과 Const
    • [VC++] 다이어로그(Dialog) 도킹(Docking) 하기
    • [VC++] 파일 입출력시 버퍼 크기 문제
    아틴
    아틴

    티스토리툴바