参考MSDN官方:
贴入官方代码:
1 // This example shows how a Mutex is used to synchronize access 2 // to a protected resource. Unlike Monitor, Mutex can be used with 3 // WaitHandle.WaitAll and WaitAny, and can be passed across 4 // AppDomain boundaries. 5 6 using System; 7 using System.Threading; 8 9 class Test 10 { 11 // Create a new Mutex. The creating thread does not own the 12 // Mutex. 13 private static Mutex mut = new Mutex(); 14 private const int numIterations = 1; 15 private const int numThreads = 3; 16 17 static void Main() 18 { 19 // Create the threads that will use the protected resource. 20 for(int i = 0; i < numThreads; i++) 21 { 22 Thread myThread = new Thread(new ThreadStart(MyThreadProc)); 23 myThread.Name = String.Format("Thread{0}", i + 1); 24 myThread.Start(); 25 } 26 27 // The main thread exits, but the application continues to 28 // run until all foreground threads have exited. 29 } 30 31 private static void MyThreadProc() 32 { 33 for(int i = 0; i < numIterations; i++) 34 { 35 UseResource(); 36 } 37 } 38 39 // This method represents a resource that must be synchronized 40 // so that only one thread at a time can enter. 41 private static void UseResource() 42 { 43 // Wait until it is safe to enter. 44 mut.WaitOne(); 45 46 Console.WriteLine("{0} has entered the protected area", 47 Thread.CurrentThread.Name); 48 49 // Place code to access non-reentrant resources here. 50 51 // Simulate some work. 52 Thread.Sleep(500); 53 54 Console.WriteLine("{0} is leaving the protected area\r\n", 55 Thread.CurrentThread.Name); 56 57 // Release the Mutex. 58 mut.ReleaseMutex(); 59 } 60 }