using System;
using System.Threading;
namespace ConsoleHelper
{
internal class Program
{
static void Main(string[] args)
{
const string MutexName = "CSharpThreadingCookbook"; // 1. 声明互斥量
using (var m = new Mutex(false, MutexName))
{
if (!m.WaitOne(TimeSpan.FromSeconds(5), false)) // 2. 获取锁,取反;没有获取锁,等待5s
{
Console.WriteLine("Second instance is running!");
}
else
{
Console.WriteLine("Running! 3s"); // 3. 获得锁,跑3s
Thread.Sleep(TimeSpan.FromSeconds(3));
Console.ReadLine();
m.ReleaseMutex(); // 4. 释放锁,让其他进程,可以进入
}
}
Console.ReadLine();
}
}
}
运行步骤:
1. 声明互斥量
2. 获取锁,取反;没有获取锁,等待5s
3. 获得锁,跑3s
4. 释放锁,让其他进程,可以进入
多进程:
- 先第一个进程先启动,
- 再启动第二个进程,5s内点击回车,获取锁,进入running状态
- 启动第三个进程,5s内不操作,显示第二个进程在running,第三个进程回车则退出