using System; using System.Threading; class PhilosopherExample { public static bool chopStick1Available = true; public static bool chopStick2Available = true; public static void Main() { Thread philosopher1 = new Thread(new ThreadStart(GetChopSticks1)); Thread philosopher2 = new Thread(new ThreadStart(GetChopSticks2)); philosopher1.Start(); philosopher2.Start(); } public static void GetChopSticks1() { while (!chopStick1Available) { Console.WriteLine("#1 waiting for 1st"); Thread.Sleep(100); } Console.WriteLine("#1 got 1st"); chopStick1Available = false; while (!chopStick2Available) { Console.WriteLine("#1 waiting for 2nd"); Thread.Sleep(100); } Console.WriteLine("#1 got 2nd"); chopStick2Available = false; Console.WriteLine("#1 uses and releases chopsticks."); chopStick1Available = true; chopStick2Available = true; } public static void GetChopSticks2() { while (!chopStick2Available) { Console.WriteLine("#2 waiting for 1st"); Thread.Sleep(100); } Console.WriteLine("#2 got 1st chopstick."); chopStick2Available = false; while (!chopStick1Available) { Console.WriteLine("#2 waiting for 2nd"); Thread.Sleep(100); } Console.WriteLine("#2 got 2nd chopstick."); chopStick1Available = false; Console.WriteLine("#2 uses and releases chopsticks."); chopStick1Available = true; chopStick2Available = true; } }