C# 中线程资源访问互斥量

使用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的初始权仅归第一个窗口所有