Critical Section
🧵 Critical Section이란?
정의
Critical Section은 여러 Thread나 Process가 동시에 접근하면 안 되는 공유 자원 구간이다.
공유 자원에 동시에 접근하면 데이터가 꼬이거나 예상하지 못한 상태 변경이 발생할 수 있다.
이 때문에 임계 구역은 반드시 적절한 동기화가 필요하다.
⚠️ 문제가 생기는 이유
- 여러 실행 흐름이 동시에 들어가면 데이터가 꼬일 수 있다.
- 각 실행 흐름은 별도의 Stack과 Register를 가지지만, 공유 자원은 함께 사용한다.
- 동시에 수정하면 race condition이 발생할 수 있다.
🧩 동기화 방식
User Mode Synchronization
- 커널 개입 없이 사용자 영역에서 동기화한다.
- 비교적 가볍지만 기능은 제한적이다.
Kernel Mode Synchronization
- 커널 모드에서 동기화를 수행한다.
- 사용자 모드보다 강력하지만 비용이 더 크다.
🔍 자주 보는 동기화 도구
Mutex
정의
Mutex는 상호 배제를 통해 한 번에 하나의 실행 흐름만 접근하도록 제어하는 도구다.
- 한 시점에 하나의 Thread만 접근할 수 있다.
- 공유 자원을 안전하게 보호할 때 사용한다.
Semaphore
정의
Semaphore는 허용된 개수만큼 동시에 접근하도록 제어하는 도구다.
- 여러 Thread나 Process에서 사용할 수 있다.
- 동시 실행 가능한 개수를 제한할 때 유용하다.
Interlock Synchronization
- 변수 값을 이용해 진입 여부를 제어한다.
- 하드웨어 또는 원자적 연산과 함께 쓰이는 경우가 많다.
📌 정리
- Critical Section은 공유 자원을 보호하는 영역이다.
- 동기화가 없으면 race condition이 발생할 수 있다.
- Mutex는 상호 배제, Semaphore는 개수 제어에 주로 사용된다.
댓글남기기