C#中Mutex是互斥锁,位于System.Threading 命名空间中。

  顾名思义,它是一个互斥的对象,同一时间只有一个线程可以拥有它,该类还可用于进程间同步的同步基元。

  如果当前有一个线程拥有它,在没有释放之前,其它线程是没有权利拥有它的。我们可以把Mutex看作洗手间,上厕所的人看作线程;上厕所的人先进洗手间,拥有使用权,上完厕所之后出来,把洗手间释放,其他人才可以使用。

static void Main(string[] args)
{
  Console.WriteLine("同时开启多个控制台应用:第一个控制台没有按下回车键,其他都要等待");
  const string mutexName = "MutexName";
  using Mutex m = new(false, mutexName);
  if (!m.WaitOne(TimeSpan.FromSeconds(1), false))
  {
    Console.WriteLine("Second inatance in running!");
  }
  else
  {
    Console.WriteLine("Running!");
    Console.ReadLine();
    m.ReleaseMutex();
  }
}