bool flag = false; System.Threading.Mutex mutex = new System.Threading.Mutex(true, "Test", out flag); //第一个参数:true--给调用线程赋予互斥体的初始所属权 //第一个参数:互斥体的名称 //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true if (flag) { Console.Write("Running"); } else { Console.Write("Another is Running"); System.Threading.Thread.Sleep(5000);//线程挂起5秒钟 Environment.Exit(1);//退出程序 }
当两个或更多线程需要同时访问一个共享资源时,系统需要使用同步机制来确保一次只有一个线程使用该资源。Mutex 是同步基元,它只向一个线程授予对共享资源的独占访问权。如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。 [csharp] view plain copy private static Mutex mut = new Mutex(); 两个线程访问资源需要互斥时,两个线程都要用互斥锁。 线程A: [csharp] view plain copy //安全时才可以访问共享资源,否则挂起。检测到安全并访问的同时会上锁。 mut.WaitOne(); //代码 //... //... //释放锁 mut.ReleaseMutex(); 线程B: [csharp] view plain copy //安全时才可以访问共享资源,否则挂起。检测到安全并访问的同时会上锁。 mut.WaitOne(); //代码 //... //... //释放锁 mut.ReleaseMutex(); 参考资料: c# 多线程 --Mutex(互斥锁):http://www.cnblogs.com/hsrzyn/articles/1588776.html MSDN:http://msdn.microsoft.com/zh-cn/library/01985e8f(v=vs.80).aspx