Mega Code Archive

 
Categories / C# Tutorial / Thread
 

Use a Mutex to control a shared resource against two current threads

using System;   using System.Threading;     class MyCounter {    public static int count = 0;    public static Mutex MuTexLock = new Mutex();  }    class IncThread {     public Thread thrd;        public IncThread() {       thrd = new Thread(this.run);       thrd.Start();     }        void run() {       Console.WriteLine("IncThread is waiting for the mutex.");        MyCounter.MuTexLock.WaitOne();        Console.WriteLine("IncThread acquires the mutex.");           int num = 10;     do {         Thread.Sleep(50);         MyCounter.count++;         Console.WriteLine("In IncThread, MyCounter.count is " + MyCounter.count);         num--;      } while(num > 0);          Console.WriteLine("IncThread releases the mutex.");          MyCounter.MuTexLock.ReleaseMutex();    }   }     class DecThread {     public Thread thrd;        public DecThread() {       thrd = new Thread(new ThreadStart(this.run));       thrd.Start();     }        void run() {       Console.WriteLine("DecThread is waiting for the mutex.");        MyCounter.MuTexLock.WaitOne();        Console.WriteLine("DecThread acquires the mutex.");        int num = 10;     do {         Thread.Sleep(50);         MyCounter.count--;         Console.WriteLine("In DecThread, MyCounter.count is " + MyCounter.count);         num--;      } while(num > 0);          Console.WriteLine("DecThread releases the mutex.");         MyCounter.MuTexLock.ReleaseMutex();    }   }      class MainClass {     public static void Main() {       IncThread mt1 = new IncThread();       DecThread mt2 = new DecThread();          mt1.thrd.Join();      mt2.thrd.Join();    }   } IncThread is waiting for the mutex. IncThread acquires the mutex. DecThread is waiting for the mutex. In IncThread, MyCounter.count is 1 In IncThread, MyCounter.count is 2 In IncThread, MyCounter.count is 3 In IncThread, MyCounter.count is 4 In IncThread, MyCounter.count is 5 In IncThread, MyCounter.count is 6 In IncThread, MyCounter.count is 7 In IncThread, MyCounter.count is 8 In IncThread, MyCounter.count is 9 In IncThread, MyCounter.count is 10 IncThread releases the mutex. DecThread acquires the mutex. In DecThread, MyCounter.count is 9 In DecThread, MyCounter.count is 8 In DecThread, MyCounter.count is 7 In DecThread, MyCounter.count is 6 In DecThread, MyCounter.count is 5 In DecThread, MyCounter.count is 4 In DecThread, MyCounter.count is 3 In DecThread, MyCounter.count is 2 In DecThread, MyCounter.count is 1 In DecThread, MyCounter.count is 0 DecThread releases the mutex.