임계 영역 (Critical Section)

I. 공유 자원 동기화 오브젝트, 임계 영역

가. 임계 영역의 개념

  • 병렬 컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원에 접근하는 코드의 일부

나. 임계 영역의 특징

  • 유저레벨 동기화 방법 중 유인하게 커널 객체 사용 안함
  • 내부 구조가 단순하여 동기화 처리 속도 빠름
  • 동일한 프로세스 내에서만 사용

 

II. 후발 스레드의 임계 영역 진입 금지 방식

유형설명
리턴– 후발 스레드는 “대기” 상태에 있지 않고, “리턴”되어 임계 영역을 실행하지 않는 방식
대기– 선 스레드가 영역 벗어날 때까지 “대기” 상태
– 선 진입 스레드 영역 벗어나면, 임계 영역 진입
  • 임계 영역을 구현하는 방법으로 Win32API 함수나 MFC이용가능

 

III. 임계 영역 구현 방법 2가지

가. Win32API 함수 이용 임계영역 구현

CRITICAL_SECTION g_cs; // 크리티컬 섹션 선언
 
::InitializeCriticalSection(&g_cs); // g_cs 초기화
::DeleteCriticalSection(&g_cs); // 종료 시 등 시점에 g_cs제거
 
// 크리티컬 영역 지정 예.
::EnterCriticalSection(&g_cs); // 임계영역 시작부
이 부분이 “임계 영역”으로 됨
::LeaveCriticalSection(&g_cs); // 임계영역 종료부

나. MFC 이용 임계 영역 구현

CCriticalSection g_CS; // 전역으로 변수 선언
 
// 임계 영역 지정 예.
g_CS.Lock(); // 임계영역 시작부
이 부분이 “임계 영역”으로 됨
g_CS.Unlock(); // 임계영역 종료부

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^