# Dining Philosopher Problem in C#

This C# Program Illustrates Dining Philosopher Problem. Here the Dining philosopher problem is solved and the results are displayed.

Here is source code of the C# Program to Illustrate Dining Philosopher Problem. The C# program is successfully compiled and executed with Microsoft Visual Studio. The program output is also shown below.

1. /*
2.  * C# Program to Illustrate Dining Philosopher Problem
3.  */
4. using System;
6. class philofork
7. {
8.     bool[] fork = new bool[5];
9.     public void Get(int left, int right)
10.     {
11.         lock (this)
12.         {
13.             while (fork[left] || fork[right]) Monitor.Wait(this);
14.             fork[left] = true; fork[right] = true;
15.         }
16.     }
17.     public void Put(int left, int right)
18.     {
19.         lock (this)
20.         {
21.             fork[left] = false; fork[right] = false;
22.             Monitor.PulseAll(this);
23.         }
24.     }
25. }
26. class Philo
27. {
28.     int n;
29.     int thinkDelay;
30.     int eatDelay;
31.     int left, right;
32.     philofork philofork;
33.     public Philo(int n, int thinkDelay, int eatDelay, philofork philofork)
34.     {
35.         this.n = n;
36.         this.thinkDelay = thinkDelay; this.eatDelay = eatDelay;
37.         this.philofork = philofork;
38.         left = n == 0 ? 4 : n - 1;
39.         right = (n + 1) % 5;
41.     }
42.     public void Run()
43.     {
44.         for (; ; )
45.         {
46.             try
47.             {
49.                 philofork.Get(left, right);
50.                 Console.WriteLine("Philosopher " + n + " is eating...");
53.                 philofork.Put(left, right);
54.             }
55.             catch
56.             {
57.                 return;
58.             }
59.         }
60.     }
61.
62. }
63. public class philopblm
64. {
65.     public static void Main()
66.     {
67.         philofork philofork = new philofork();
68.         new Philo(0, 10, 50, philofork);
69.         new Philo(1, 20, 40, philofork);
70.         new Philo(2, 30, 30, philofork);
71.         new Philo(3, 40, 20, philofork);
72.         new Philo(4, 50, 10, philofork);
73.     }
74. }

Here is the output of the C# Program:

Philosopher 0 is eating...
Philosopher 1 is eating...
Philosopher 2 is eating...
Philosopher 3 is eating...
Philosopher 4 is eating...
Philosopher 0 is eating...
Philosopher 1 is eating...
Philosopher 2 is eating...
Philosopher 3 is eating...
Philosopher 4 is eating...
Philosopher 0 is eating...

Sanfoundry Global Education & Learning Series – 1000 C# Programs.