【问题标题】:What is difference between Mutex() and Mutex(true,"myMutex") Thread object?Mutex() 和 Mutex(true,"myMutex") Thread 对象有什么区别?
【发布时间】:2014-06-12 14:44:02
【问题描述】:

我有创建多个线程的代码,所有线程都尝试将信息记录在单个文件中 我尝试使用互斥锁登录文件,但是当我使用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();               
}

【问题讨论】:

  • 您应该已经添加了一个标签来指示您正在使用的语言。通过查看类名/命名空间,我假设您使用的是 C#。
  • 你试过文档here吗?
  • 参见 MSDN:msdn.microsoft.com/en-us/library/f55ddskf(v=vs.110).aspx - 基本上,一个 named 互斥锁可以从多个地方访问 - 包括跨进程甚至跨用户(如果是全局的)。匿名互斥锁是唯一且孤立的
  • 缺少哪些日志信息?您的代码是否演示了日志的编写?

标签: c# multithreading mutex


【解决方案1】:

来自parameterless constructor的文档。

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

第二个参数只给互斥量一个名字。因此,例如,如果另一个进程创建了一个同名的互斥锁,则现有的互斥锁将在这两个进程之间共享。

【讨论】:

    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多