通过 Mutex/Semaphore 实现程序进程实例的控制

实现应用程序的进程单例或者特定数量的控制有多种方式,而通过信号量实现则是最简单有效的办法,在.NET中我们可以通过 Multex、Semaphore 类来实现。

 

1、Mutex、Semaphore 简介 

  • Mutex 是用于同步的线程或进程的互斥体。Multex 分为两种:未命名的局部互斥体和命名的系统互斥体。前者用于线程间的互斥,后者用于系统进程间的互斥。本文讨论的进程单例的实现将演示使用“命名的系统互斥体”。
  • Semaphore 是用于同步的线程或进程的信号量。Semaphore 也分为两种:未命名的局部信号量和命名的系统信号量。前者用于线程间的同步,后者用于系统进程间的同步。本文的进程实例数量的控制的实现将演示使用“命名的系统信号量”。

2、进程单例的控制

实现思路:通过在程序启动后创建特定名称的命名的系统互斥体,标识应用程序的进程实例,后来启动的进程实例如果发现已经存在该名称的命名互斥体时,则直接退出进程,这样便保持了进程实例的唯一。

具体的代码如下:

 

 

3、进程实例数量的控制

实现思路:在应用程序启动后创建特定名称的具有指定最大资源数的命名的系统信号量,并请求进入该信号量,如果无法进入该信号量,则表明系统中进程的实例已经达到最大数,此时退出,以此控制应用程序的进程实例不超过特定的数量。

具体代码如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值