Mutex()和Mutex(true," myMutex")之间有什么区别?线程对象?

时间:2014-06-12 14:44:03

标签: c# multithreading mutex

我有创建多个线程的代码,所有线程都尝试将信息记录在一个文件中 我尝试使用互斥锁来登录文件,但是当我使用Mutex()Mutex(true or false, "name")对象时,我会得到不同的响应。 Mutex()给出了正确的预期结果,但Mutex(true/false, "myname")缺少一些日志信息。

那么他们之间有什么区别?

System.Threading.Mutex mtx = new System.Threading.Mutex(false ,"Myname" );

try
{       
    try
    {
        mtx.WaitOne();
    }
    catch (AbandonedMutexException) 
    { }            

  //log into file
}

catch (Exception)
{
    Console.WriteLine("EXCEPTION CAUGHT ***");
}
finally
{
    mtx.ReleaseMutex();
    mtx.Close();               
}

1 个答案:

答案 0 :(得分:3)

来自parameterless constructor

的文档
  

调用此构造函数重载与调用Mutex(布尔)构造函数重载并为互斥锁的初始所有权指定false相同。也就是说,调用线程不拥有互斥锁。

第二个参数仅为互斥锁提供名称。因此,例如,如果另一个进程创建具有相同名称的互斥锁,则将在这两个进程之间共享现有互斥锁。