Mega Code Archive

 
Categories / C# / Thread
 

Monitor

using System; using System.Threading; public class EnterExit {     private int result = 0;     public void NonCriticalSection() {         Console.WriteLine("Entered Thread " + Thread.CurrentThread.GetHashCode());         for (int i = 1; i <= 5; i++) {             Console.WriteLine("Result = " + result++ + "  ThreadID "                               + Thread.CurrentThread.GetHashCode());             Thread.Sleep(1000);         }         Console.WriteLine("Exiting Thread " + Thread.CurrentThread.GetHashCode());     }     public void CriticalSection() {         Monitor.Enter(this);         Console.WriteLine("Entered Thread " + Thread.CurrentThread.GetHashCode());         for (int i = 1; i <= 5; i++) {             Console.WriteLine("Result = " + result++ + "  ThreadID " +                               Thread.CurrentThread.GetHashCode());             Thread.Sleep(1000);         }         Console.WriteLine("Exiting Thread " + Thread.CurrentThread.GetHashCode());         Monitor.Exit(this);     }     public static void Main(String[] args) {         EnterExit e = new EnterExit();         Thread nt1 = new Thread(new ThreadStart(e.NonCriticalSection));         nt1.Start();         Thread nt2 = new Thread(new ThreadStart(e.NonCriticalSection));         nt2.Start();         Thread ct1 = new Thread(new ThreadStart(e.CriticalSection));         ct1.Start();         Thread ct2 = new Thread(new ThreadStart(e.CriticalSection));         ct2.Start();     } }