Mega Code Archive

 
Categories / C# Tutorial / Thread
 

Using A Monitor

using System; using System.Collections.Generic; using System.Text; using System.Threading; class Tester {     static long counter = 0;     //new Tester();     static void Main()     {         Thread[] myThreads = {                new Thread( new ThreadStart(Decrementer) ),                new Thread( new ThreadStart(Incrementer) )                           };         int ctr = 1;         foreach (Thread myThread in myThreads)         {             myThread.IsBackground = true;             myThread.Start();             myThread.Name = "Thread" + ctr.ToString();             ctr++;             Console.WriteLine("Started thread {0}", myThread.Name);             Thread.Sleep(50);         }         foreach (Thread myThread in myThreads)         {             myThread.Join();         }     }     static void Decrementer()     {         try         {             Monitor.Enter(counter);             if (counter < 10)             {                 Console.WriteLine(Thread.CurrentThread.Name);                 Console.WriteLine(counter);                 Monitor.Wait(counter);             }             while (counter > 0)             {                 long temp = counter;                 temp--;                 Thread.Sleep(1);                 counter = temp;                 Console.WriteLine(Thread.CurrentThread.Name);                 Console.WriteLine(counter);             }         }         finally         {             Monitor.Exit(counter);         }     }     static void Incrementer()     {         try         {             Monitor.Enter(counter);             while (counter < 10)             {                 long temp = counter;                 temp++;                 Thread.Sleep(1);                 counter = temp;                 Console.WriteLine(Thread.CurrentThread.Name);                 Console.WriteLine(counter);             }             Monitor.Pulse(counter);         }         finally         {             Monitor.Exit(counter);         }     } }