2

我对理解Mutex课程的运作方式有点困惑。

假设我有一个这样的代码将由多个任务执行:

bool lockAcquired = mutex.WaitOne();

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

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

4

2 回答 2

1

根据文档,返回值为:

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

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

于 2013-07-30T08:57:02.163 回答
0

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

于 2013-07-30T02:16:13.140 回答