在解釋死鎖如何發生以及如何阻止死鎖的過程中,你似乎遇到了問題。
當兩個( 最小二) 線程試圖獲取已經被另一個鎖鎖定的資源的鎖時,就會發生死鎖。 線程 1鎖定資源 1嘗試獲取對資源 2的鎖定。 同時,線程 2對資源 2有一個鎖,它嘗試獲取對資源 1的鎖。 兩個線程永遠不會放棄鎖,因此發生死鎖。
避免死鎖的最簡單方法是使用超時值。 Monitor類( system.threading.monitor ) 可以在獲取鎖期間設置超時。
例子
if(Monitor.TryEnter(this, 500)) { //critical section } catch (Exception ex) { } finally { Monitor.Exit(); }