使用mutex,进行互斥访问
示例中运行第一个窗口显示running
此时运行第二个窗口显示 空白 处于等待。若在5秒内在第一个窗口中输入,将释放资源,此时第二个窗口将显示running
using System;
using System.Threading;
namespace MutexDemo
{
class Program
{
static void Main(string[] args)
{
const string MutexName = "Demo";
Console.WriteLine("mutex name {0}", MutexName);
using (var m = new Mutex(false, MutexName))
//开启第二个窗口时,以下方式将不会回馈m状态,以上方式可以
//using (var m = new Mutex(false, MutexName))
{
if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
Console.WriteLine("second instance is running");
else
{
Console.WriteLine("running");
//按键后释放资源
Console.ReadLine();
m.ReleaseMutex();
}
}
Console.WriteLine("main thread waiting for a key");
Console.ReadKey();
}
}
}
若将
using (var m = new Mutex(false, MutexName))
改为
using (var m = new Mutex(false, MutexName))
则第一个窗口释放资源后,第二个窗口也不会取得资源;即mutex的初始权仅归第一个窗口所有