[筆記]Monitor與Lock
Monitor常用屬性及方法:
1. Monitor.Enter(obj) : 在指定物件上取得排它鎖。
2. Monitor.Exit(obj) : 釋放指定物件的排它鎖。
3. Monitor.IsEntered : 確定當前執行緒是否仍持有指定物件的鎖。
4. Monitor.Pulse : 通知等待佇列中的執行緒鎖定物件狀態的變更。
5. Monitor.PulsAll : 通知所有在等待佇列中的執行緒鎖定物件狀態的變更。
6. Monitor.TryEnter(obj) : 嘗試取得指定物件的排它鎖。
7. Monitor.TryEnter(obj,bool) : 嘗試取得指定物件上的排它鎖,並且自動設定值,用以指示是否得到排它鎖。
8. Wait(obj) : 釋放物件上的鎖並且阻擋當前執行緒,直到該執行緒重新或取排它鎖。
與lock不同的是,Monitor的方法允許值類型的變數。
lock是Monitor的語法蜜糖,且僅能用在參考型變數。
程式碼範例:
(Monitor的範例)
Monitor.Enter(obj);
doSomething();
}catch(Exception ex)
{}
finally{
Monitor.Exit(obj);
}
(Lock的範例)
doSomething();
}