개요


Dining Philosophers 문제

n 명의 철학자가 원탁에 둘러 앉아 가운데에 있는 스파게티를 먹는다. 철학자 한 명 당 하나의 포크가 있고, 스파게티를 먹기 위해서는 양손에 포크를 들어야 한다. 이 때 철학자는 thread 인데, 포크는 Shared memory 일 뿐이므로 다수의 theread 는 해당 메모리에 쉽게 접근할 수 있다. Shared memory 를 사용하게 되는 연산이 있는 곳을 critical section(CS) 이라 한다. 이 때 동시에 접근하여 연산을 진행하면, 즉 비동기적으로 thread 가 진행되면 CPU 의 스케줄링 때문에 언제 context switching 이 발생할지 모르므로 연산에 의한 결과값을 확신할 수 없다. thread 는 각각의 register 를 독립적으로 갖고 있기 때문이다. register 이외에도 stack, program counter 도 독립적으로 갖는다. 그리고 shared memory 에는 code, data, heap segment 이 있다.