[筆記]Monitor與Lock

  • 1206
  • 0

[筆記]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();
  }