Understanding the Mutex Class

本文关键字:Class Mutex the Understanding | 更新日期: 2023-09-27 18:25:22

我对理解Mutex类的工作原理有点困惑。

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

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

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

Understanding the Mutex Class

根据文档,返回值为:

CCD_ 12,如果当前实例接收到信号。如果从未用信号通知当前实例,则WaitOne永远不会返回。

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

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