多线程编程学习系列之---Mutex类

代码

static void Main()
{
	//定义一个互斥量
   const string MutextName = "CSharpThreadingCookbook";
   using (var m = new Mutex(false, MutextName))
   {
       if (!m.WaitOne(TimeSpan.FromSeconds(5), false))
       {
           Console.WriteLine("Second instance is running");
       }
       else
       {
           Console.WriteLine("Running");
           Console.ReadLine();
           m.ReleaseMutex();
       }
   }
   //此代码只为了方便截图,实际演示无用
   Console.ReadKey();
}

运行第一个
在这里插入图片描述
在第一个中按下任意键,5秒内运行第二个
在这里插入图片描述
原理
程序启动定义了一个互斥量,设置initialOwner为false,意味着如果互斥量已经被创建则,允许程序获取该互斥量,如果没有获取到互斥量,则显示running,等待直到按下了任何键然后释放变量。
如果再允许同一个程序,则会在5秒内尝试获取互斥量,如果此时在第一个程序按下了任何键,第二个程序则会开始执行。然而,如果保持等待了5秒,第二个程序将无法获取到该互斥量。

注意:
互斥量是全局的操作系统对象,请务必正确关闭互斥量,最好是using代码块来包裹互斥量对象。

该方式可用于在不同程序中同步线程,可被推广到大量的使用场景。

发布了37 篇原创文章 · 获赞 3 · 访问量 6332

猜你喜欢

转载自blog.csdn.net/huan13479195089/article/details/88884131