배고픈 철학자의 문제는
운영체제시간에 언급된 적이 있었다. 공부에 신경쓰지 않던 때라 흘려 들었던 터라, 현재 공부하다가 관련된 내용이 나와서 간단히 정리한다.
여러 프로세스가 공유되는 자원을 사용하기 때문에 발생하는 문제에 대한 것을 이해하기에 흥미롭게 만든 것이다.
그냥 위키피디아 내용에 내가 이해한 내용을 살포시 얹었다.
식사하는 철학자들 문제
식사하는 철학자들 문제는 전산학에서 동시성과 교착 상태를 설명하는 예시로, 여러 프로세스가 동시에 돌아갈 때 교착 상태가 나타나는 원인을 직관적으로 알 수 있다.
다섯 명의 철학자가 원탁에 앉아 있고, 각자의 앞에는 스파게티가 있고 양옆에 젓가락이 한 짝씩 있다. 그리고 각각의 철학자는 다른 철학자에게 말을 할 수 없다. 이때 철학자가 스파게티를 먹기 위해서는 양 옆의 젓가락 짝을 동시에 들고 있어야 한다. 이때 각각의 철학자가 왼쪽의 젓가락 짝을 들고 그 다음 오른쪽의 젓가락 짝을 들어서 스파게티를 먹는 알고리즘을 가지고 있으면, 다섯 철학자가 동시에 왼쪽의 젓가락 짝을 든 다음 오른쪽의 젓가락 짝을 들 때까지 무한정 기다리는 교착 상태에 빠지게 될 수 있다.
또한 어떤 경우에는 동시에 젓가락 양짝을 집을 수 없어 식사를 하지 못하는 기아 상태가 발생할 수도 있고, 몇몇 철학자가 다른 철학자보다 식사를 적게 하는 경우가 발생하기도 한다.
해결책[편집]
에츠허르 데이크스트라의 해결책은 다음과 같다. 각각의 철학자를 라고 하고, 각 철학자의 왼쪽 젓가락을 라고 하자. 를 제외한 네 명은 먼저 를 집은 후 를 집는 방식을 취한다. 그리고 는 이와 반대로, 를 먼저 집은 후 를 집는다. 이것은 원래 방식의 대칭성을 제거하고, 따라서 교착 상태를 막을 수 있다.