等待完成由于废弃的互斥锁

时间:2015-10-31 11:20:58

标签: multithreading mutex waitone

在运行以下应用程序的第一个实例时,它会打印“已获取”。 但是,如果我开始第二个,它等待1分钟。 在该间隔期间,如果按下进入并离开“第一个实例”,它将在第二个实例中抛出“等待完成由于放弃的互斥锁”异常。 是不是获取线程? (因为第一个实例已经发布了它?!)

   using (var m1 = new Mutex(false, "consoleapp"))
        {

            if (!m1.WaitOne(60000, false))
            {
                Console.WriteLine("It is already runnig");

            }
            else
            {
                Console.WriteLine("Acquired");
                Console.ReadLine();
            }

        }

1 个答案:

答案 0 :(得分:2)

您应该通过在else块中调用 m1.Release()来明确释放互斥锁的所有权。否则它会被释放但不会被释放,因此 WaitOne()抛出的异常[在Hristo的评论中]