philosophers(3), thread
철학자 문제 정의
동기화 문제의 고전적인 문제 중 하나.
이진 세마포어를 이용해서 풀곤 합니다.
이진 세마포어는 뮤텍스와 동일하므로, 같은 로직으로 생각해도 무방합니다.
문제
- 철학자 N명이 식탁에 둥글게 앉습니다.
- 각 철학자는
Eating
과Thinking
Sleeping
상태에 있을 수 있습니다. - 위 상태 중 1개의 상태에만 있습니다.
- 각 철학자는
- 이 철학자들 사이에는 철학자의 수만큼 포크가 놓여져 있습니다.
- 철학자들은 포크 2개를 들어야 식사를 할 수 있습니다.
- 포크는 한 번에 1개만 들 수 있습니다.
- 다른 철학자가 사용중인 포크는 사용할 수 없습니다.
- 식사가 끝나면 포크를 내려놓습니다.
- 철학자들은 포크 2개를 들어야 식사를 할 수 있습니다.
- 식사가 끝나면 포크를 내려놓고, 잠을 잡니다.
-
일어나면 생각을 시작합니다.
- 이 시뮬레이션은 철학자가 1명이라도 배고파서 죽으면 끝납니다.
- 모든 철학자는 모두 먹어야하며, 배고프면 안됩니다.
- 철학자는 상대방과 이야기를 하지 않습니다.
- 철학자는 서로 누군가가 죽을 것 같은지 알 수 없습니다.
해결
- 모든 철학자가 모두 같은 방향의 포크를 들면 교착상태에 빠진다.
- 데드락 해결책
- 이를 해결하기 위한 3가지 방법이 존재한다.
- 최대 4명의 철학자만 테이블의 앉게한다.
- 한 철학자가 젓 가락 두 개를 모두 집을 수 있을때만 젓가락을 집도록 허용한다.
- 비대칭 해결안(짝수번째 철학자는 왼쪽포크 집고 오른쪽 포크를 집고, 홀수번째 철학자는 오른쪽 왼쪽 순으로 집는다.)
댓글남기기