我有一段代码,它创建了多个线程,所有线程都试图将信息记录在一个单独的文件中。我尝试使用互斥锁来记录文件日志,但是当我使用
Mutex()
和Mutex(true/false, "myname")
对象时,我得到了不同的响应。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()
表示创建一个新的互斥对象,用于控制对共享资源的访问。如果该对象已经存在,则打开已有对象。Mutex(bool, string)
含义是创建或打开具有指定名称的新互斥对象。第一个参数bool
指示是否拥有互斥对象的初始所有权,第二个参数string
则是互斥对象的名称。 - Adam Houldsworth