티스토리 뷰

SoftWare/OS

식사하는 철학자 문제(C언어)

White Whale 2016. 5. 7. 23:00
728x90

1. 개요

 

  각각의 철학자가 생각을 하다가 배가 고프면 식사를 합니다. 식사를 하기위해서는 한 쌍은 젓가락(포크)가 필요합니다. 만약 철학자 모두가 오른쪽의 젓가락을 든다고 한다면 모두 하나의 젓가락만 가지고 있기 때문에 식사를 하지 못합니다.



2. 해결방안

 

 첫 번째 해결 방안은 젓가락의 수가 철학자의 수보다 많으면 됩니다.
 두 번째 해결 방안은 누군가 한명이 반대 젓가락을 먼저 들면 됩니다.  

 세 번째 해결 방안은 철학자가 2개의 젓가락을 모두 집을 수 있을 때만 집게 합니다.



3. Source Code

 

  두 번째 해결 방안인 누군가 한명이 반대 젓가락을 먼저 집게 하는 방식을 조금 변경하여 짝수 철학자와 홀수 철학자로 나누어 반대 방향 젓가락을 먼저 집게 하도록 구현하였습니다. C언어로 구현하였으며 mutex와 condition을 이용하여 구현하였습니다.



  포크(젓가락)을 들고 내려 놓을 때 mutex로 접근을 제한했고 permits 변수를 사용하여 포크의 사용여부를 나타 내었습니다.



  철학자 쓰레드에서 동작하는 함수를 보면 왼쪽 포크를 들고 오른쪽 포크를 듭니다. 이후 식사를 하고 오른쪽 포크, 왼쪽 포크 순으로 포트를 돌려 놓습니다.

'SoftWare > OS' 카테고리의 다른 글

OS - 7. Deadlocks  (0) 2016.05.30
은행원 알고리즘(Banker's Algorithm) 예시 및 C코드 예제  (3) 2016.05.23
OS - 6. Process Synchronization (1)  (0) 2016.04.25
OS - 5. CPU Scheduling (2)  (0) 2016.04.23
OS - 5. CPU Scheduling (1)  (0) 2016.04.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함