[운영체제] 15. Process Synchronization 4

이건회·2022년 3월 21일
0

운영체제

목록 보기
14/27

  • 식사하는 철학자 문제를 모니터 버전으로 구현한 코드다.
  • 노란색 박스를 보면 각각의 철학자가 eat,think를 반복한다. 밥을 먹기 위해서는 젓가락을 잡는 pickup, 먹은 후에는 젓가락을 내려놓는 putdown을 수행하는데 젓가락이라는 공유 자원에 접근하기 위해서는 모니터로 들어가야 한다. 모니터 내부에 젓가락을 잡는 pickup 코드가 구현되어 있다.
  • 젓가락을 잡으려면 철학자가 배고픈 조건을 충족해야 하므로 상태(state)를 hungry로 바꾼다.
  • 철학자가 양쪽 젓가락을 모두 잡을수 있는지 검사하는 test 함수가 구현되어 있다. 왼쪽과 오른쪽 사용자가 모두 밥을 먹고 있지 않을때 잡을 수 있다. 철학자 i가 잠들어 있다면 signal을 이용해 깨워줄 수 있다.
  • 밥을 다 먹으면 putdown으로 젓가락을 내려놓고 생각하는 상태로 들어간다. putdown시 인접 철학자가 본인 때문에 밥을 먹지 못하고 잠들어 있는 상태인지 확인하기 위해 인접 철학자에 대한 test를 해준다. 따라서 잠든 철학자가 있다면 test 통해 그 철학자가 양쪽 젓가락을 집을 수 있는지 확인하고 eating 상태로 만들어 준 후 signal 통해 깨워준다.
profile
하마드

0개의 댓글