근데 철학자라서 우아하니까 동시에 집어가지 않고 한 번에 한 사람씩만 상호배제를 통해서 접근
스파게티를 집을 때는 왼쪽과 오른쪽 포크을 이용해서 스파게티를 떠 가야 함
한 사람이 스파게티를 가져갈 때 양쪽 사람들의 사람들의 포크를 써서 그 동안은 사용 불가
포크도 공유자원, 상호배제되는 자원
- 각 철학자 프로세스가 동시에 실행
- fork 2개를 집어 eat 한 후에 fork를 다시 돌려놓음
- 한 사람이 포크를 잡았을 때 포크로 스파게티를 먹으려는 옆 철학자는 기다려야 함 -> 포크를 집고 있을 때는 옆 사람이 포크를 놓는 신호를 줄 때까지 대기 -> 교착상태가 발생할 가능성
- 모두가 기다리게 되면 모두 굶어 기아상태 발생
해결방법
세마포어를 이용한 해결
포크를 집고 음식을 먹는 행위가 원자적으로 이루어지게끔 구성
테이블의 이용 권한을 흭득하고 운영권한을 넘겼다가 룸을 반납
교착상태가 발생하지 않음
모니터를 이용한 해결
5개의 프로세스 실행
각각의 프로세스는 get_forks와 release_forks 수행
두 개의 자원을 요청하는 코드를 모니터를 통해 얻음
모니터는 자원 두 개를 흭득(get)하고 반환(release)하는 코드를 모니터 프로그램을 통해서 자원 관리 및 행위 개선