必威体育Betway必威体育官网
当前位置:首页 > IT技术

关于C#中怎么锁住一段代码——Mutex

时间:2019-07-16 05:12:09来源:IT技术作者:seo实验室小编阅读:90次「手机版」
 

mutex

C#中mutex是互斥锁,位于System.Threading 命名空间中。

顾名思义,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。

如果当前有一个线程拥有它,在没有释放之前,其它线程是没有权利拥有它的。我们可以把Mutex看作洗手间,上厕所的人看作线程;上厕所的人先进洗手间,拥有使用权,上完厕所之后出来,把洗手间释放,其他人才可以使用。

线程使用Mutex.WaitOne()方法等待C# Mutex对象被释放,如果它等待的C# Mutex对象被释放了,它就自动拥有这个对象,直到它调用Mutex.releasemutex()方法释放这个对象,而在此期间,其他想要获取这个C# Mutex对象的线程都只有等待。

我们可以利用这个特性来控制一个应用程序只能运行一个实例。其他实例由于得不到这个Mutex而不能运行。

代码如下所示

[c#] view plain copy

  1. //程序启动时判断进程是否可以启动  
  2.         private APP() {  
  3.             if (!CanCreate()) {  
  4.                 logger.Warn("Can't run the environment now, because one instance is already running!");  
  5.                 environment.exit(-1);  
  6.             }  
  7.         }  
  8.         //进程是否可以创建  
  9.         private static bool CanCreate() {  
  10.             bool canCreate;  
  11.             mutex = new Mutex(true, Name, out canCreate);  
  12.             return canCreate;  
  13.         }  

这里先运行一个实例,然后再运行第二个,通过日志可以查看启动过程,如下所示

[c#] view plain copy

  1. 2016-11-23 13:47:03 -[ Info]- App Info: PDT_Test_Environment v1.0.0  
  2. 2016-11-23 13:47:03 -[ Info]- Application startup...  
  3. 2016-11-23 13:47:05 -[ Warn]- Can't run the Environment now, because one Instance is already running!  
  4. 2016-11-23 13:47:08 -[ Info]- Mutex PDT_Test_Environment was released. Application exit...  

从日志可以看出,当第二个实例想运行的时候,由于已经有一个进程拥有了这个互斥锁,此进程不能拥有,所以进程启动被终止。

此外还需说明一点,mutex的name是在系统中是唯一的,也就是上述代码中的Name,系统依靠这个name属性来标识唯一的Mutex。

相关阅读

C#操作Excel文件三种方式

.Net平台上对Excel进行操作主要有两种方式。第一种,把Excel文件看成一个数据库,通过OleDb的方式进行读取与操作;第二种,调用Excel

cer, pfx 创建,并且读取公钥/密钥,加解密 (C#程序实现)

http://blog.csdn.net/zj510/article/details/39964533PKI技术(public key infrastructure)里面,cer文件和pfx文件是很常见的。通常c

C#的TimeSpan介绍

TimeSpan结构:表示一个时间间隔。 它含有以下四个构造函数: TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。 (Dat

在c#中完成1到10的素数(1不是素数)

    int t=0;     //素数的个数   Random ran = new Random();   double [] a = new double  [10];   Console.Writ

C#之Chart控件系列教程——一

一、什么是Micosoft.Chart.Controls Micosoft.Chart.Controls是微软自带的一个图形可视化的组件,可以在Web程序和窗体程序中(Windo

分享到:

栏目导航

推荐阅读

热门阅读