C 中Monitor物件與Lock關鍵字的區別分析

2021-09-07 06:54:26 字數 1342 閱讀 2392

這篇文章主要介紹了c#中monitor物件與lock關鍵字的區別,需要的朋友可以參考下

monitor物件

1.monitor.enter(object)方法是獲取 鎖,monitor.exit(object)方法是釋放鎖,這就是monitor最常用的兩個方法,當然在使用過程中為了避免獲取鎖之後因為異常,致鎖 無法釋放,所以需要在try{} catch(){}之後的finally{}結構體中釋放鎖(monitor.exit())。

2.monitor的常用屬性和方法:

enter(object) 在指定物件上獲取排他鎖。

exit(object) 釋放指定物件上的排他鎖。

isentered 確定當前執行緒是否保留指定物件鎖。

pulse 通知等待佇列中的執行緒鎖定物件狀態的更改。

pulseall 通知所有的等待執行緒物件狀態的更改。

tryenter(object) 試圖獲取指定物件的排他鎖。

tryenter(object, boolean) 嘗試獲取指定物件上的排他鎖,並自動設定乙個值,指示是否得到了該鎖。

wait(object) 釋放物件上的鎖並阻止當前執行緒,直到它重新獲取該鎖。

lock關鍵字

1.lock關鍵字實際上是乙個語法糖,它將monitor物件進行封裝,給object加上乙個互斥鎖,a程序進入此**段時,會給object 物件加上互斥鎖,此時其他b程序進入此**段時檢查object物件是否有鎖?如果有鎖則繼續等待a程序執行完該**段並且解鎖object物件之後,b 程序才能夠獲取object物件為其加上鎖,訪問**段。

2.lock關鍵字封裝的monitor物件結構如下:

複製** **如下:

trycatch(exception ex)

finally

3.鎖定的物件應該宣告為private static object obj = new object();盡量別用公共變數和字串、this、值型別。

monitor和lock的區別

1.lock是monitor的語法糖。

2.lock只能針對引用型別加鎖。

3.monitor能夠對值型別進行加鎖,實質上是monitor.enter(object)時對值型別裝箱。

4.monitor還有其他的一些功能。

複製** **如下:

class program

} public void monitorsomething()

catch(exception ex)

finally

} public void dosomething()

}

C 中Monitor物件與Lock關鍵字的區別分析

這篇文章主要介紹了c 中monitor物件與lock關鍵字的區別,需要的朋友可以參考下 monitor物件 1.monitor.enter object 方法是獲取 鎖,monitor.exit object 方法是釋放鎖,這就是monitor最常用的兩個方法,當然在使用過程中為了避免獲取鎖之後因為...

C 中Monitor物件與Lock關鍵字的區別分析

monitor物件 1.monitor.enter object 方法是獲取鎖,monitor.exit object 方法是釋放鎖,這就是monitor最常用的兩個方法,當然在使用過程中為了避免獲取鎖之後因為異常,致鎖無法釋放,所以需要在try catch 之後的finally 結構體中釋放鎖 m...

c 中Monitor的使用

首先lock和minitor有什麼區別呢?其實lock在il 中會被翻譯成monitor。也就是monitor.enter obj 和monitor.exit obj lock obj 等價為 try catch finally 所以lock能做的,monitor肯定能做,monitor能做的,lo...