Dining Philosophers

Nagarasa Miththilan
2 min readMay 4, 2019

--

The dining philosophers problem states that there are 5 philosophers sharing a circular table and they eat and think alternatively. There is a bowl of rice for each of the philosophers and 5 chopsticks. A philosopher needs both their right and a left chopstick to eat. A hungry philosopher may only eat if there are both chopsticks available. Otherwise, a philosopher puts down their chopstick and begin thinking again.

The dining philosopher is a classic synchronization problem as it demonstrates a large class of concurrency control problems.

Consider there are five philosophers sitting around a circular dining table. The dining table has five chopsticks and a bowl of rice in the middle as shown in the below figure.

At any instant, a philosopher is either eating or thinking. When a philosopher wants to eat, he uses two chopsticks — one from their left and one from their right. When a philosopher wants to think, he keeps down both chopsticks at their original place.

From the problem statement, it is clear that a philosopher can think for an indefinite amount of time. But when a philosopher starts eating, he has to stop at some point of time. The philosopher is in an endless cycle of thinking and eating.

I simulate this solution using the threads and semaphores concepts.and I used JAVA as a language to develop solution for this problem .In the implementation i created 2 classes .one is Philosopher and the second one is DiningPhilosopher.

This is the psudo code

while(true) {

// Initially -thinking about life

think();

// Take a break from thinking, hungry now

pick_up_left_fork();

pick_up_right_fork();

eat();

put_down_right_fork();

put_down_left_fork();

//Back to thinking!

}

--

--