업데이트:

태그:

카테고리:



철학자 문제 정의

동기화 문제의 고전적인 문제 중 하나.

이진 세마포어를 이용해서 풀곤 합니다.

이진 세마포어는 뮤텍스와 동일하므로, 같은 로직으로 생각해도 무방합니다.

문제

  • 철학자 N명이 식탁에 둥글게 앉습니다.
    • 각 철학자는 EatingThinking Sleeping상태에 있을 수 있습니다.
    • 위 상태 중 1개의 상태에만 있습니다.
  • 이 철학자들 사이에는 철학자의 수만큼 포크가 놓여져 있습니다.
    • 철학자들은 포크 2개를 들어야 식사를 할 수 있습니다.
      • 포크는 한 번에 1개만 들 수 있습니다.
      • 다른 철학자가 사용중인 포크는 사용할 수 없습니다.
    • 식사가 끝나면 포크를 내려놓습니다.
  • 식사가 끝나면 포크를 내려놓고, 잠을 잡니다.
  • 일어나면 생각을 시작합니다.

  • 이 시뮬레이션은 철학자가 1명이라도 배고파서 죽으면 끝납니다.
  • 모든 철학자는 모두 먹어야하며, 배고프면 안됩니다.
  • 철학자는 상대방과 이야기를 하지 않습니다.
  • 철학자는 서로 누군가가 죽을 것 같은지 알 수 없습니다.


해결

  1. 모든 철학자가 모두 같은 방향의 포크를 들면 교착상태에 빠진다.
    • 데드락 해결책
    • 이를 해결하기 위한 3가지 방법이 존재한다.
      1. 최대 4명의 철학자만 테이블의 앉게한다.
      2. 한 철학자가 젓 가락 두 개를 모두 집을 수 있을때만 젓가락을 집도록 허용한다.
      3. 비대칭 해결안(짝수번째 철학자는 왼쪽포크 집고 오른쪽 포크를 집고, 홀수번째 철학자는 오른쪽 왼쪽 순으로 집는다.)


댓글남기기