Process Synchronization
= 프로세스 동기화
= Concurrency Control
= 병행 제어
동시 실행될 때 문제가 생기지 않게 한다.
둘의 목적은 다르지만 코딩을 하면, 코드가 비슷해짐


각각의 철학자들은 젓가락을 집고, 먹고, 내려놓고, 생각한다.
젓가락이라는 공유자원에 접근하기 위해서 monitor로 식사하는 철학자 문제 정의
젓가락을 잡는 코드는 monitor 내부에 있는 코드로 구현

밥을 먹기위해 젓가락을 잡은거니까 철학자의 상태는 hungry
state는 공유변수다.
본인만 본인 상태를 바꿀 수 있는게 아니라, 인접 철학자도 상태를 바꿀 수 있음.
그런데, monitor 안에서 공유데이터 접근하는 코드를 만들었기 때문에 lock을 걸거나 푸는 코드가 필요 없음.

i라는 철학자가 젓가락을 잡을 수 있는지 test 함수를 한다.
=> 왼쪽 젓가락과 오른쪽 젓가락 모두 available 해야 한다.

=> 이 상태를 모두 만족할 때만
eating 으로 변경 만약 test 함수에서 조건에 만족하지 않았으면, ~~ eating의 상태가 될 수 없었을 것임.

그럼 i의 철학자는 잠들게 된다.

밥 다먹고 젓가락 내려놓을 때 putdown 함수 실행

혹시 인접 철학자가 나 때문에 밥을 못먹고 잠들어 있다면, 깨워주는 코드가 여기 들어있음.
testtest
만약 i가 왼쪽 철학자라면
그 후, eating상태로 바꿔주고,
자고 있었으니까 자기 자신을 깨워준다 !