我对理解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
语句将始终执行。感谢。
答案 0 :(得分:1)
答案 1 :(得分:0)
没有理由在此代码中检查lockAcquired
。如果你要检查它,你应该在破坏互斥锁保护的状态之前检查它。