Use a Mutex to control a shared resource against two current threads : Mutex « Thread « C# / CSharp Tutorial






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.








20.20.Mutex
20.20.1.Threading with Mutex
20.20.2.Use a Mutex to control a shared resource against two current threads
20.20.3.Use the Mutex object: WaitOne
20.20.4.Own a Mutex
20.20.5.Name a Mutex
20.20.6.How a Mutex is used to synchronize access to a protected resource