zoukankan      html  css  js  c++  java
  • 利用Mutex控制程序唯一实例

    Mutex可以实现跨进程的同步,当需要控制应用程序只有一个进程实例时,可通过判断相同名字的Mutex资源是否已存在来判断程序是否已经启动。

    示例如下:

     1  static void Main()
     2         {            
     3             bool createdNew=false;
     4             Mutex mutex=new Mutex(true,"consoleapplication1",out createdNew);
     5             if (!createdNew)
     6             {
     7                 Console.WriteLine("Application has been started!");
     8                 Console.Read();
     9                 return;
    10             }
    11             else
    12             {
    13                 //Code to start the application
    14             }
    项目启动时,名为“consoleapplication1”的mutex资源即被创建,结束后即被释放,再有项目实例需启动时,可通过判断该资源是否存在来判断程序是否已经启动

    在官方文档的介绍中,有这样一段话

    在运行终端服务的服务器上,已命名的系统 mutex 可以具有两级可见性。如果名称以前缀“Global\”开头,则 mutex 在所有终端服务器会话中均为可见。如果名称以前缀“Local\”开头,则 mutex 仅在创建它的终端服务器会话中可见。在这种情况下,服务器上各个其他终端服务器会话中都可以拥有一个名称相同的独立 mutex。如果创建已命名 mutex 时不指定前缀,则它将采用前缀“Local\”。在终端服务器会话中,只是名称前缀不同的两个 mutex 是独立的 mutex,这两个 mutex 对于终端服务器会话中的所有进程均为可见。即:前缀名称“Global\”和“Local\”说明 mutex 名称相对于终端服务器会话(而并非相对于进程)的范围。

    很可惜没有找到C#示例,这段话可以理解为:

    mutexName= "Local\\" +"AppName";

    只对创建它的会话有效,也就是说新开启一个远程链接时会再次启动 ConsoleApp实例。

    mutexName= "Global\\" +"AppName";

    对所有会话有效,开启多个远程链接时,只有第一个远程链接会成功启动 ConsoleApp实例。

     
  • 相关阅读:
    pandas 学习 第2篇:Series -(创建,属性,转换和索引)
    pandas 学习 第1篇:pandas基础
    linux中的软连接和硬链接
    分布式与集群的简单讲解
    Redis持久化
    CentOS7安装后无法使用鼠标选中,复制问题解决
    centos 7 安装 ifconfig 管理命令
    ES分布式文档数据库讲解
    Storm,Spark和Flink三种流式大数据处理框架对比
    mvn常见参数命令讲解
  • 原文地址:https://www.cnblogs.com/Finding2013/p/3012474.html
Copyright © 2011-2022 走看看