멀티태스킹과 식사하는 철학자 문제
n명의 철학자가 스파게티를 먹고 있다고 가정한다.
철학자들은 잠자기, 먹기, 생각하기 셋 중 한 번에 하나만 할 수 있고 모든 철학자가 스파게티를 먹어야 한다.
식사하는 중에는 무조건 두 개의 포크를 사용해야 한다.
포크의 개수는 철학자의 인원수와 같으며, 포크는 각각의 철학자 사이에 놓이게 된다.
이 때 만약에 모든 철학자들이 동시에 자신의 왼쪽 포크를 잡게 된다면, 자기 오른쪽의 포크가 사용 가능해질 때까지 기다려야 하는데,
모든 철학자들이 기다리는 상태에 놓이게 된다.
이렇게 아무것도 진행할 수 없는 상태를 교착(deadlock)상태라고 한다.
멀티태스킹이 가능한 멀티쓰레드 환경일 때
사용자 레벨에서 Semaphore나 Mutex를 이용하여 한 쓰레드가 동작중일 때 다른 쓰레드가 CPU를 잡지 못하게 만들면 교착상태를 방지할 수 있다.
참고자료
멀티태스킹과 식사하는 철학자 문제