日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#中Monitor和Lock的用法区别

發布時間:2023/12/18 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中Monitor和Lock的用法区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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對象結構如下:

try{Monitor.Enter(obj);dosomething();}catch(Exception ex){}finally{Monitor.Exit(obj);}

  3.鎖定的對象應該聲明為private static object obj = new object();盡量別用公共變量和字符串、this、值類型。

Monitor和Lock的區別

  1.Lock是Monitor的語法糖。

  2.Lock只能針對引用類型加鎖。

  3.Monitor能夠對值類型進行加鎖,實質上是Monitor.Enter(object)時對值類型裝箱。

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

本文代碼示例:

class Program{private static object obj = new object();public void LockSomething(){lock (obj){dosomething();}}public void MonitorSomeThing(){try{Monitor.Enter(obj);dosomething();}catch(Exception ex){}finally{Monitor.Exit(obj);}}public void dosomething(){ //做具體的事情}}

總結

以上是生活随笔為你收集整理的C#中Monitor和Lock的用法区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。