Process Synchronization
= 프로세스 동기화
= Concurrency Control
= 병행 제어
동시 실행될 때 문제가 생기지 않게 한다.
둘의 목적은 다르지만 코딩을 하면, 코드가 비슷해짐
각각의 철학자들은 젓가락을 집고, 먹고, 내려놓고, 생각한다.
젓가락이라는 공유자원
에 접근하기 위해서 monitor
로 식사하는 철학자 문제 정의
젓가락을 잡는 코드는 monitor 내부에 있는 코드로 구현
밥을 먹기위해 젓가락을 잡은거니까 철학자의 상태는 hungry
state는 공유변수
다.
본인만 본인 상태를 바꿀 수 있는게 아니라, 인접 철학자도 상태를 바꿀 수 있음.
그런데, monitor 안에서 공유데이터 접근하는 코드를 만들었기 때문에 lock을 걸거나 푸는 코드가 필요 없음.
i라는 철학자가 젓가락을 잡을 수 있는지 test 함수를 한다.
=> 왼쪽 젓가락과 오른쪽 젓가락 모두 available 해야 한다.
=> 이 상태를 모두 만족할 때만
eating
으로 변경 만약 test 함수에서 조건에 만족하지 않았으면, ~~ eating
의 상태가 될 수 없었을 것임.
그럼 i의 철학자는 잠들게 된다.
밥 다먹고 젓가락 내려놓을 때 putdown
함수 실행
혹시 인접 철학자가 나 때문에 밥을 못먹고 잠들어 있다면, 깨워주는 코드가 여기 들어있음.
test
test
만약 i가 왼쪽 철학자라면
그 후, eating
상태로 바꿔주고,
자고 있었으니까 자기 자신을 깨워준다 !