您可以使用 < a href=" "http://msdn. microsoft.com/query/ dev10.query? appId= Dev10IDEF1 & amp; l= EN- US& k=k% 28SYSTEM.Treadding. MUTEX% 29; k% 28MUTEX%29; k% 28MUTEX% 29; k% 28TargetFramworkMoniker-%22. NETFRAMEWORK, VERSION=V4.% 22% 29; k% 28DevLang- CSHARP%29 & amp;rd= true" rel=" nofolpol " > Mutex
using System;
using System.Threading;
class Test
{
// Create a new Mutex. The creating thread does not own the
// Mutex.
private static Mutex mut = new Mutex();
private const int numIterations = 1;
private const int numThreads = 3;
static void Main()
{
// Create the threads that will use the protected resource.
for(int i = 0; i < numThreads; i++)
{
Thread myThread = new Thread(new ThreadStart(MyThreadProc));
myThread.Name = String.Format("Thread{0}", i + 1);
myThread.Start();
}
// The main thread exits, but the application continues to
// run until all foreground threads have exited.
}
private static void MyThreadProc()
{
for(int i = 0; i < numIterations; i++)
{
UseResource();
}
}
// This method represents a resource that must be synchronized
// so that only one thread at a time can enter.
private static void UseResource()
{
// Wait until it is safe to enter.
mut.WaitOne();
Console.WriteLine("{0} has entered the protected area",
Thread.CurrentThread.Name);
// Place code to access non-reentrant resources here.
// Simulate some work.
Thread.Sleep(500);
Console.WriteLine("{0} is leaving the protected area
",
Thread.CurrentThread.Name);
// Release the Mutex.
mut.ReleaseMutex();
}
}