zoukankan      html  css  js  c++  java
  • Mutex互斥锁的使用方法(大夫同时只能给一个人看病,出来一位,再进去一位)

    同一时刻,只能有一个线程持有该锁!

    使用Mutex互斥锁来同步两个单独的程序(可以两次运行该程序,查看运行结果)

         static void Main(string[] args)
            {
                const string MutexName = "CSharpThreadingCookbook";
    
                using (var m = new Mutex(false, MutexName))
                {
                    //WaitOne构造表示指定的时间内(这里是5秒)是否可以获得互斥锁定
                    if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
                    {
                        //如果当前实例5秒内不能获取到互斥锁(由于其他线程占用锁【第一次运行的程序未回车】,则此不能获取到互斥锁定,所以代码运行这里)
                        Console.WriteLine("Second instance is running!");
                        Console.Read();
                    }
                    else//获取到互斥锁
                    {
                        ////如果当前实例5稍内收到了信号(如果5秒内获得了互斥锁定)【**********第一次运行可以直接进入到这里********】
                        Console.WriteLine("Running!");//在这里执行同步代码
                        Console.ReadLine();//等待输入,或者回车(如果不回车,持续占用互斥锁)
                        m.ReleaseMutex();
                    }
                }
            }

    使用Mutex互斥锁禁止程序启动两次

         [STAThread]
            static void Main()
            {
                bool createNew;
                using (System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out createNew))
                {
                    if (createNew)//如果指定的命名系统互斥体不存在(说明没有程序运行过)
                    {
                        Application.Run(new Form1());
                    }
                    else
                    {
                        MessageBox.Show("应用程序已经在运行中...");
                        System.Threading.Thread.Sleep(1000);
                        System.Environment.Exit(1);
                    }
                }
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }

    具名的互斥量 是全局的操作系统对象! 请务必正确关闭互斥量。最好使用using代码块包裹互斥量对象。

  • 相关阅读:
    线程和进程
    Map和Collection
    数组
    泛型
    堆和栈
    Java的三大特性
    Log日志
    关系运算
    switch
    main 及Scanner
  • 原文地址:https://www.cnblogs.com/gougou1981/p/12337091.html
Copyright © 2011-2022 走看看