728x90
임계 영역 (critical section) 이란?
- 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 결과가 달라지는 코드 영역
- 해결 할 수 있는 조건
- 상호 배제 : 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없음
- 한정 대기 : 특정 프로세스가 영원히 임계영역에 들어가지 못하면 안 됨
- 융통성 : 한 프로세스가 다른 프로세스의 일을 방해해선 안됨
- 임계 영역 해결방법: 뮤텍스(mutex), 세마포어(semaphore), 모니터(Monitor)
뮤텍스

- 프로세스가 스레드나 공유자원을 lock()을 통해 잠금 설정하고 사용 후에는 unlock()을 통해 잠금해제하는 객체
- 잠금 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고, 해제는 반대로 접근 가능함
- 잠금과 잠금 해제의 상태만 가짐
- 잠금을 기반으로 상호 배제가 일어나는 잠금 매커니즘
세마포어

- 일반화된 뮤텍스
- 간단한 정수값과 두 가지 함수(wait, signal)로 공유 자원에 대한 접근 처리
- wait() : 자신의 차례가 올 때 까지 기다리는 함수
- signal() : 다음 프로세스로 순서를 넘겨주는 함수
- 프로세스/스레드가 공유자원에 접근하면 세마포어에서 wait() 작업을 수행함
- 프로세스/스레드가 공유자원에서 해제되면 세마포어에서 signal() 작업을 수행함
- 세마포어에는 조건 변수가 없음. 프로세스 / 스레드가 세마포어 값을 수정하면 다른 프로세스 / 스레드는 동시에 세마포어 값을 수정할 수 없음
- 신호를 기반으로 상호배제가 일어나는 신호 메커니즘으로 상호배제를 명시적으로 구현해야 함
- 바이너리 세마포어 : 0과 1 두 값만 가지 수 있음
- 카운팅 세마포어 : 여러 개의 값을 가질 수 있는 세마포어로 여러 자원에 대한 접근을 제어하는 데 사용
뮤텍스 VS 세마포어
뮤텍스 : 잠금을 기반으로 상호배제가 일어나는 잠금 매커니즘
세마포어 : 신호을 기반으로 상호배제가 일어나는 신호 매커니즘
모니터

- 둘 이상의 스레드나 프로세스가 공유자원에 안전하게 접근할 수 있도록 공유자원을 숨기고 해당 접근에 대해 인터페이스만 제공
- 모니터 큐를 통해 공유 자원에 대한 작업을 순차적으로 처리
- 세마포어보다 구현하기 쉽고 상호배제는 자동적으로 이뤄짐
모니터 VS 세마포어
모니터 : 자동 상호배제
세마포어 : 명시적으로 구현하는 상호배제
참고: 면접을 위한 CS 전공지식 노트
728x90
반응형
'cs > dev' 카테고리의 다른 글
| [리눅스]포그라운드(Foreground)와 백그라운드(Background) (0) | 2025.11.19 |
|---|---|
| [Spring]Spring Security 설정과 OAuth2와 순환 참조 해결 (0) | 2025.11.18 |
| [Spring]JPA N + 1 문제 (0) | 2025.11.09 |
| [Spring] Spring MVC 와 Spring WebFlux 차이 (1) | 2025.10.28 |
| [Spring]Spring의 3가지 핵심 프로그래밍 모델(AOP, DI, IOC) (0) | 2025.10.22 |