我對理解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