了解Mutex类

时间:2013-07-30 02:02:45

标签: c# mutex

我对理解Mutex类的工作原理感到有些困惑。

假设我有类似的代码将由多个任务执行:

bool lockAcquired = mutex.WaitOne();

try
{
    sharedVar += 1;
}
finally
{
    if (lockAcquired) mutex.ReleaseMutex();
}

我的理解(如果我错了,请纠正我)是它到达mutex.WaitOne()的那一刻,它会先等待另一个线程执行ReleaseMutex(),然后继续执行后续语句。因此,如果另一个线程具有锁定,它将不会继续执行try..finally语句。如果它获得锁定,那么它将继续执行下一个代码。 lockAcquiredtrue。我的问题是,为什么我需要在lockAcquired语句中检查truefinally是否仅在获取锁定时执行。这意味着if块中的finally语句将始终执行。感谢。

2 个答案:

答案 0 :(得分:1)

根据the documentation,返回值为:

  

true如果当前实例收到信号。如果从未发出当前实例的信号,则WaitOne永远不会返回。

这意味着检查返回值没有意义,它永远不会是false

答案 1 :(得分:0)

没有理由在此代码中检查lockAcquired。如果你要检查它,你应该在破坏互斥锁保护的状态之前检查它。