2019년 3월 8일
임계 영역 (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(); // 임계영역 종료부 |