我有创建多个线程的代码,所有线程都试图在单个文件中记录信息我尝试使用互斥锁登录到文件,但我得到不同的响应,当我使用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();
}
摘自无参数构造函数的文档
调用此构造函数重载与调用Mutex(Boolean)构造函数重载并为互斥对象的初始所有权指定false相同。也就是说,调用线程并不拥有互斥锁。
第二个参数只给互斥对象一个名称。因此,例如,如果另一个进程创建了一个具有相同名称的互斥锁,那么现有的互斥锁将在这两个进程之间共享。