크리티컬 센션(임계 영역) 기반의 동기화
- 일종의 Key(열쇠)를 가지고 접근하도록 하게 함
CRITICAL_SECTION gCriticalSection; // 임계영역 오브젝트(Key에 해당)
InitializeCriticalSection(&gCriticalSection); // 오브젝트 초기화(동기화 작업 준비)
.....
// 임계영역 진입을 위해 임계영역 오브젝트 획득
EnterCriticalSection(&gCriticalSection); // 열쇠 획득
/* 임 계 영 역 */
// 임계영역 오브젝트 반환
LeaveCriticalSection(&gCriticalSection); // 열쇠 반환
.....
DeleteCriticalSection(&gCriticalSection); // 열쇠 소멸
- 문제점: A, B 쓰레드가 동시에 EnterCriticalSection 함수에 진입하여 A가 먼저 열쇠 획득하게 되면 B는 A가 열쇠를 반환(LeaveCriticalSection)까지 Blocked 상태에 머무르게 됨 => 성능 저하, 비효율
※ 따라서 임계영역의 최소화가 필요
인터락 함수 기반의 동기화
- 원자적 접근(Atomic Access)을 보장 : 하나의 접근만을 허용
예) InterlockedIncrement() 함수는 인자로 받는 변수에 다른 접근이 없이 오직 하나의 접근만을 허용하여 값을 변경
'시스템 프로그래밍' 카테고리의 다른 글
13-1. 쓰레드 동기화의 개념/임계 영역 접근 동기화 (0) | 2022.06.21 |
---|---|
12-3. 쓰레드의 상태 컨트롤 / 쓰레드의 우선순위 컨트롤 (0) | 2022.06.07 |
12-2. 쓰레드의 성격과 특성 (0) | 2022.06.07 |
12-1. Windows에서의 쓰레드 생성과 소멸 (0) | 2022.06.02 |
11-2. Windows에서의 프로세스와 쓰레드 (0) | 2022.05.31 |