시스템 프로그래밍

13-2. 유저 모드 동기화

CalebHong 2022. 6. 21. 11:26

크리티컬 센션(임계 영역) 기반의 동기화

- 일종의 Key(열쇠)를 가지고 접근하도록 하게 함

CRITICAL_SECTION gCriticalSection; // 임계영역 오브젝트(Key에 해당)

InitializeCriticalSection(&gCriticalSection); // 오브젝트 초기화(동기화 작업 준비)
.....

// 임계영역 진입을 위해 임계영역 오브젝트 획득
EnterCriticalSection(&gCriticalSection); // 열쇠 획득

/*	임 계 영 역     */

// 임계영역 오브젝트 반환
LeaveCriticalSection(&gCriticalSection); // 열쇠 반환

.....
DeleteCriticalSection(&gCriticalSection); // 열쇠 소멸

- 문제점: A, B 쓰레드가 동시에 EnterCriticalSection 함수에 진입하여 A가 먼저 열쇠 획득하게 되면 B는 A가 열쇠를 반환(LeaveCriticalSection)까지 Blocked 상태에 머무르게 됨 => 성능 저하, 비효율

※ 따라서 임계영역의 최소화가 필요

 

인터락 함수 기반의 동기화

- 원자적 접근(Atomic Access)을 보장 : 하나의 접근만을 허용

예) InterlockedIncrement() 함수는 인자로 받는 변수에 다른 접근이 없이 오직 하나의 접근만을 허용하여 값을 변경