세마포어(Semaphore)

정의

임계 구역(Critical Section)

구현

P, V 설명
---------
- P
 - 임계 구역 들어가기 전에 수행(프로레스 진입 여부를 자원 개수 (S)를 통해 결정)
- V
 - 임계 구역에서 나올 때 수행(자원 반납 알림, 대기 중인 프로세스를 깨우는 신호

구조
----
P(S)
// -- 임계 구역 --
V(S)

구현
----
proceduer P(S) -----> 최소 S값은 1
	while S=0 do wait -----> S가 0면 1이 될 때까지 기다림
	S := S-1  -----> S를 0을 만들어 다른 프로세스가 들어 오지 못하게 함
end P
--- 임계 구역 ---
procedure V(S) -----> 현재 상태는 S가 0
	S := S+1 -----> S를 1로 원위치시켜 해제하는 과정
end V

위 코드 구현 기반 예시

최초 S 값은 1이고, 현재 해당 구역을 수행할 프로세스 A, B가 있다고 가정

  1. 먼저 도착한 A가 P(S)를 실행하여 S를 0으로 만들고 임계구역에 들어감
  2. 그 뒤에 도착한 B가 P(S)를 실행하지만 S가 0이므로 대기 상태
  3. A가 임계구역 수행을 마치고 V(S)를 싱행하면 S는 다시 1이 됨
  4. B는 이제 P(S)에서 while문을 빠져나올 수 있고 임계구역으로 들어가 수행

뮤텍스(Mutex)

정의