System.Threading.Mutex :同步基元,它只向一个线程授予对共享资源的独占访问权
实现原理: 在程序启动时,请求一个互斥体,如果能获取对指定互斥的访问权,就继续运行程序,否则就退出程序
PS:如果一个线程获取了互斥体,则要获取该互斥体的第二个线程将被挂起,直到第一个线程释放该互斥体。
eg:
- static class Program
- {
- /// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- static void Main()
- {
- //Application.EnableVisualStyles();
- //Application.SetCompatibleTextRenderingDefault(false);
- //Application.Run(new Form1());
- bool bCreatedNew=false;
- //第一个参数:true--给调用线程赋予互斥体的初始所属权
- //第一个参数:互斥体的名称
- //第三个参数:返回值,如果调用线程已被授予互斥体的初始所属权,则返回true
- Mutex mutex=new Mutex(true,"MutexDemo",out bCreatedNew);
- if(!bCreatedNew)
- {
- MessageBox.Show("已经有一个实例在运行","提示");
- // mutex.ReleaseMutex();//释放
- return;
- }
- try
- {
- Application.Run(new Form1());
- }
- catch
- {
- }
- }
- }
- 此外,类型功能的还有lock,monitor(锁定)
-
- //lock一般用法
- lock (this)
- {
- Console.WriteLine("lock()");
- Thread.Sleep(50);
- }
- //monitor一般用法
- Monitor.Enter(this);
- Console.WriteLine("monitor");
- Thread.Sleep(50);
- Monitor.Exit(this);