Use a Mutex to control a shared resource against two current threads : Mutex : Thread C# Examples


C# Examples » Thread » Mutex »

 

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();  
    }    
}
    
   
  
   



Output

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.


HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Thread
» Mutex