<aside>
📌 Initial Attempts to Solve Problem, 프로그램적 해결법의 충족 조건, Algorithm 1, Algorithm 2, Algorithm 3(Peterson's Algorithm), Synchronization Hardware
</aside>
Intial Attempts to Solve Problem
-
두 개의 프로세스가 있다고 가정 (P0, P1)
-
프로세스들의 일반적인 구조

-
프로세스들은 수행의 동기화(synchronize)를 위해 몇몇 변수를 공유할 수 있다 → synchronization variable
프로그램적 해결법의 충족 조건
-
Mutual Exclusion (상호 배제)
- 프로세스 Pi 가 critical section 부분을 수행 중이면 다른 모든 프로세스들은 그들의 critical section에 들어가면 안 된다.
- 위의 파란색 코드
-
Progress (진행)
- 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다.
- Starvation 발생 방지
-
Bounded Waiting (유한 대기)
- 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 한계가 있어야 한다.
-
가정
- 모든 프로세스의 수행 속도는 0보다 크다
- 프로세스들 간의 상대적인 수행 속도는 가정하지 않는다
Algorithm 1

- 프로세스가 2개(P0, P1)
- P1은 파란 코드의 숫자가 반대 (turn ≠ 1, turn = 0)
- turn은 어떤 프로세스의 차례인지를 나타냄 (critical section 에 들어갈 차례)
- 내 차례가 아닐 때는 while 구문을 돌며 계속 대기
- 차례를 바꿔주는 것은 상대방 프로세스가(그림에서는 P1) 함