iOS-Junior-Developers / Operating-System

Operating System Stuy
0 stars 0 forks source link

Dining Philosophers Problem #33

Open JongHoooon opened 1 year ago

JongHoooon commented 1 year ago

철학자 5명이 원탁에 앉아있고 각각 양쪽에 포크 1개씩 놓여있고 식사를 하려면 포크가 2개 필요하다.

  1. 왼쪽 포크부터 집어든다. 다른 철학자가 사용중이면 내려놓을 때까지 대기한다.
  2. 왼쪽을 들었으면 오른쪽을 든다. 들 수 없으면 들 수 있을 때까지 대기한다.
  3. 두 포크를 모두 들었으면 일정시간동안 식사를 한다.
  4. 식사를 마쳤으면 오른쪽 젓가락을 내려놓고, 그 당므 왼쪽 젓가락을 내려놓는다.
  5. 생각하다 배고프면 다시 1번으로 돌아간다.

교착상태가 발생할 수 있다.

교착상태 4가지 조건

  1. 상호베타(Mutual Exclusion) 포크는 한번에 한 철학자만 사용할 수 있다.

  2. 보유 및 대기(Hold and Wait) 왼쪽 들은채로 오른쪽 기다린다

  3. 비선점(No Preemption) 강제로 뺏을 수 없다.

  4. 환형대기(Circular Wait) 모든 철학자들이 자신의 오른쪽에 앉은 철학자가 놓기를 기다린다.

보통 환형대기를 해결해서 문제를 해결한다. 짝수번째 철학자는 왼쪽부터 홀수번째 철학자는 오른쪽부터 들게해서 해결할 수 있다.