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
语句将始终被执行。谢谢
根据文档,返回值为:
CCD_ 12,如果当前实例接收到信号。如果从未用信号通知当前实例,则
WaitOne
永远不会返回。
这意味着检查返回值没有意义,它永远不会是false
。
没有理由在该代码中检查lockAcquired
。如果你要检查它,你可能应该在破坏互斥锁保护的状态之前检查一下。