Critical Section에 대한 접근을 막기 위해 Locking 메커니즘이 필요하다.
Mutex(binary semaphore)
Semaphore
- 임계 구역에 여러 쓰레드가 들어 갈 수 있으며 Counter를 두어 허용 쓰레드 수 제어
식별자 | 역할 | 설명 |
---|---|---|
P | 검사 | 임계 영역에 들어갈 때 S값이 1 이상이면 영역 진입 후 S값 1 차감/S값 0이면 대기 |
V | 증가 | 임계 영역에서 나올 때 S값을 1 더하고 나옴 |
S | 세마포어 값 | 초기 값만큼 여러 프로세스가 동시 임계 영역 접근 가능 |
다음과 같이 S값이 0일 때 대기하는 기능을 위해서 S값이 복귀될 때까지 반복문을 수행한다.
중단은 보통 loop로 표현하며 이 loop는 단순히 CPU 부하만 증가시킨다.
위와 같은 단점이 있어 반복문을 수행하는 것 대신 대기 큐에 넣는다.
그리고 wakeup() 함수를 통해 대기 큐에 있는 프로세스를 재실행함으로 의미없는 CPU 부하를 제거할 수 있다.
POSIX 세마포어에 다음과 같은 주요 함수가 있다.