날개넷

wingnet88.egloos.com

포토로그



[운영체제] 식사하는 철학자 c언어소스

식사하는 철학자 구현 입니다.


리눅스 환경에서 컴파일 하시면 됩니다.


데드락 문제의 해결은 철학자수를


5명에서 4명으로 줄여버리면 됩니다.



gcc -o main main.c


gcc main.c




main.c.



1. Dining philosopher

 

fork() 5개의 프로세스를 실행시킨 후 각각의 프로세스가 철학자1,철학자2 의 기능을 수행하게 작성되었다.

 

공통변수 semaphore chopstick[N]; pipe를 통하여 서로의 통신을 하여 어떤상태에 있는지 확인 한 후 작업을 수행한다.

 

기본적으로 0번 프로세스 는 오른쪽의 젓가락을 먼저 들고, 나머지 프로세스 들은 왼쪽의 젓가락부터 들게 된다. 가능한 데드락 상태에 빠지지 않게하기 위해서이다. 모두 오른쪽으로 들면 데드락이 발생할 경우가 상당히 높다 

하지만 근본적으로 해결하지는 못하엿다. 처음에는 5명인 철학자를 4명으로 줄여서 수행하면 데드락에 빠지지 않을 것이라 생각하고 해보았다. 물론 데드락에 빠지지 않고 수행속도도 전혀 지장이 없지만, 5개의 자원을 가지고 4개의 프로세스밖에 못수행 한다는 점에서 자원효율성을 생각해 약간의 위험을 감수하고 그냥 5개의 프로세스를 돌렸다.


덧글

댓글 입력 영역