实现应用程序的进程单例或者特定数量的控制有多种方式,而通过信号量实现则是最简单有效的办法,在.NET中我们可以通过 Multex、Semaphore 类来实现。
1、Mutex、Semaphore 简介
- Mutex 是用于同步的线程或进程的互斥体。Multex 分为两种:未命名的局部互斥体和命名的系统互斥体。前者用于线程间的互斥,后者用于系统进程间的互斥。本文讨论的进程单例的实现将演示使用“命名的系统互斥体”。
- Semaphore 是用于同步的线程或进程的信号量。Semaphore 也分为两种:未命名的局部信号量和命名的系统信号量。前者用于线程间的同步,后者用于系统进程间的同步。本文的进程实例数量的控制的实现将演示使用“命名的系统信号量”。
2、进程单例的控制
实现思路:通过在程序启动后创建特定名称的命名的系统互斥体,标识应用程序的进程实例,后来启动的进程实例如果发现已经存在该名称的命名互斥体时,则直接退出进程,这样便保持了进程实例的唯一。
具体的代码如下:
3、进程实例数量的控制
实现思路:在应用程序启动后创建特定名称的具有指定最大资源数的命名的系统信号量,并请求进入该信号量,如果无法进入该信号量,则表明系统中进程的实例已经达到最大数,此时退出,以此控制应用程序的进程实例不超过特定的数量。
具体代码如下: