我对理解Mutex
类如何工作有点困惑。了解互斥锁类
说我有一个这样的代码将被多个任务执行:
bool lockAcquired = mutex.WaitOne();
try
{
sharedVar += 1;
}
finally
{
if (lockAcquired) mutex.ReleaseMutex();
}
我的理解(纠正我,如果我错了)是它达到mutex.WaitOne()
那一刻,它会先等待另一个线程在继续执行后续的语句之前执行ReleaseMutex()
。因此,如果另一个线程有锁,它将不会继续并执行try..finally
语句。如果它获得锁定,那么它将继续执行下一个代码。那么lockAcquired
将是true
。我的问题是,为什么我需要检查finally
语句中的lockAcquired
是否为true
,如果它只在获取锁定时执行。这意味着finally
块中的if
语句将始终执行。谢谢。
'互斥'可能会非常棘手。我会强烈建议,除非你的要求是非常具体的使用'lock'和'Monitor'。这些应该满足99%的同步需求。 – Jay