我对理解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
将始终被执行。谢谢。