亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中lock用法詳解

2020-01-24 02:17:14
字體:
來源:轉載
供稿:網友

本文實例講述了C#中lock的用法。分享給大家供大家參考。具體分析如下:

lock 關鍵字可以用來確保代碼塊完成運行,而不會被其他線程中斷。這是通過在代碼塊運行期間為給定對象獲取互斥鎖來實現的。

先來看看執行過程,代碼示例如下:

lock 語句用于獲取某個給定對象的互斥鎖,執行一個語句,然后釋放該鎖。
lock-statement:(lock 語句:)

復制代碼 代碼如下:
lock(expression) embedded-statement(lock   (   表達式   )   嵌入語句)

lock 語句的表達式必須表示一個引用類型的值。永遠不會為 lock 語句中的表達式執行隱式裝箱轉換,因此,如果該表達式表示的是一個值類型的值,則會導致一個編譯時錯誤。

下列形式的 lock 語句:

復制代碼 代碼如下:
lock (x) ...

(其中 x 是一個引用類型的表達式)完全等效于
復制代碼 代碼如下:
system.threading.monitor.enter(x);
try {
   ...
}
finally {
   system.threading.monitor.exit(x);
}

不同的只是:實際執行中 x 只計算一次。
當一個互斥鎖已被占用時,在同一線程中執行的代碼仍可以獲取和釋放該鎖。但是,在其他線程中執行的代碼在該鎖被釋放前是無法獲得它的。

一個類的 system.type 對象可以方便地用來當作關于該類的靜態方法的互斥鎖。例如:

復制代碼 代碼如下:
class cache
{
   public static void add(object x) {
      lock (typeof(cache)) {
         ...
      }
   }
   public static void remove(object x) {
      lock (typeof(cache)) {
         ...
      }
   }
}

假設線程a先執行,線程b稍微慢一點。線程a執行到lock語句,判斷obj是否已申請了互斥鎖,判斷依據是逐個與已存在的鎖進行object.referenceequals比較(此處未加證實),如果不存在,則申請一個新的互斥鎖,這時線程a進入lock里面了。
這時假設線程b啟動了,而線程a還未執行完lock里面的代碼。線程b執行到lock語句,檢查到obj已經申請了互斥鎖,于是等待;直到線程a執行完畢,釋放互斥鎖,線程b才能申請新的互斥鎖并執行lock里面的代碼。

接下來說一些該lock什么對象。

為什么不能lock值類型,比如lock(1)呢?lock本質上monitor.enter,monitor.enter會使值類型裝箱,每次lock的是裝箱后的對象。lock其實是類似編譯器的語法糖,因此編譯器直接限制住不能lock值類型。

退一萬步說,就算能編譯器允許你lock(1),但是object.referenceequals(1,1)始終返回false(因為每次裝箱后都是不同對象),也就是說每次都會判斷成未申請互斥鎖,這樣在同一時間,別的線程照樣能夠訪問里面的代碼,達不到同步的效果。同理lock((object)1)也不行。

那么lock("xxx")字符串呢?msdn上的原話是:

鎖定字符串尤其危險,因為字符串被公共語言運行庫 (clr)“暫留”。 這意味著整個程序中任何給定字符串都只有一個實例,就是這同一個對象表示了所有運行的應用程序域的所有線程中的該文本。因此,只要在應用程序進程中的任何位置處具有相同內容的字符串上放置了鎖,就將鎖定應用程序中該字符串的所有實例。

通常,最好避免鎖定 public 類型或鎖定不受應用程序控制的對象實例。例如,如果該實例可以被公開訪問,則 lock(this) 可能會有問題,因為不受控制的代碼也可能會鎖定該對象。這可能導致死鎖,即兩個或更多個線程等待釋放同一對象。出于同樣的原因,鎖定公共數據類型(相比于對象)也可能導致問題。而且lock(this)只對當前對象有效,如果多個對象之間就達不到同步的效果。

lock(typeof(class))與鎖定字符串一樣,范圍太廣了。

某些系統類提供專門用于鎖定的成員。例如,array 類型提供 syncroot。許多集合類型也提供 syncroot。

而自定義類推薦用私有的只讀靜態對象,比如:

復制代碼 代碼如下:
private static readonly object obj = new object();

為什么要設置成只讀的呢?這時因為如果在lock代碼段中改變obj的值,其它線程就暢通無阻了,因為互斥鎖的
對象變了,object.referenceequals必然返回false。

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美激情在线视频| 91精品国产91久久久久久不卡| 一本色道久久88综合日韩精品| 国产男人精品视频| 国产91对白在线播放| 欧美精品做受xxx性少妇| 国产99视频在线观看| 亚洲欧美另类中文字幕| 色哟哟亚洲精品一区二区| 国产精品热视频| 亚洲成av人影院在线观看| 午夜精品久久久久久久白皮肤| 久久精品国产99国产精品澳门| 在线电影中文日韩| 亚洲免费高清视频| 久99九色视频在线观看| 日本韩国在线不卡| 欧美日韩性生活视频| 欧美日韩一区二区精品| 中文字幕亚洲欧美日韩在线不卡| 欧美亚州一区二区三区| 中文字幕成人精品久久不卡| 国产视频久久久| 亚洲成人999| 亚洲精品自拍偷拍| 国产精品国模在线| 亚洲久久久久久久久久| 欧美成人网在线| 亚洲色图激情小说| 久久在精品线影院精品国产| 免费97视频在线精品国自产拍| 欧美一区二区三区四区在线| 91理论片午午论夜理片久久| 久久免费视频网| 日本中文字幕久久看| 日韩在线中文字幕| 国产精品视频久久久久| 亚洲人成在线一二| 日韩欧美国产成人| 国产在线视频一区| 91中文字幕一区| 国产精品欧美风情| 亚洲欧洲免费视频| 51色欧美片视频在线观看| 91精品中文在线| 国产成人自拍视频在线观看| 国内自拍欧美激情| 日韩欧美黄色动漫| 国产精品久久久| 九九视频这里只有精品| 91久久精品视频| 亚洲色图50p| …久久精品99久久香蕉国产| 韩国美女主播一区| 成人国产精品久久久| 色综合久综合久久综合久鬼88| 国产成人精品一区二区在线| 精品国产福利视频| 欧美裸体视频网站| 亚洲欧洲在线观看| 国产一区二区在线播放| 午夜精品免费视频| 亚洲欧洲在线视频| 97色在线观看| 精品国产一区二区三区久久久狼| 国产69精品99久久久久久宅男| 在线成人免费网站| 97在线观看视频国产| 欧美在线精品免播放器视频| 久久久久久久激情视频| 久久久天堂国产精品女人| 在线一区二区日韩| 欧美精品激情在线观看| 欧美日韩aaaa| 欧美亚洲在线观看| 97色在线播放视频| 69影院欧美专区视频| 亚洲国内精品在线| 国产精品成人免费电影| 欧美高清一级大片| 在线视频免费一区二区| 亚洲国产精品久久久久秋霞不卡| 伦伦影院午夜日韩欧美限制| 国产成人精品电影久久久| 国产精品视频专区| 亚洲性xxxx| 欧美限制级电影在线观看| 91精品国产综合久久男男| 亚洲丁香婷深爱综合| 欧洲亚洲女同hd| 欧美性猛交xxxx免费看漫画| 日韩高清人体午夜| 国产午夜精品免费一区二区三区| 日韩av理论片| 国产精品高清在线观看| 亚洲自拍高清视频网站| 久热国产精品视频| 91亚洲精品一区| 欧美一区三区三区高中清蜜桃| 97色伦亚洲国产| 亚洲欧美综合区自拍另类| 91精品国产高清自在线看超| 国产精品视频成人| 亚洲激情久久久| 在线观看精品自拍私拍| 国产在线播放不卡| 欧美国产日韩中文字幕在线| 亚洲欧美日韩精品| 性欧美办公室18xxxxhd| 成人97在线观看视频| 亚洲成人在线视频播放| 国产精品久久一区| 亚洲欧美日韩国产中文| 亚洲国产精品久久久久久| 欧美日韩免费区域视频在线观看| 国内外成人免费激情在线视频网站| 国模精品视频一区二区| 成人444kkkk在线观看| 最新国产精品亚洲| 在线日韩精品视频| 久久九九国产精品怡红院| 欧日韩不卡在线视频| 亚洲国内高清视频| 亚洲sss综合天堂久久| 欧美日韩中文在线| 欧美日本黄视频| 久久久久中文字幕| 国产美女精品视频免费观看| 欧美日韩亚洲一区二区三区| 亚洲精品色婷婷福利天堂| 日本电影亚洲天堂| 国产精品揄拍500视频| 久久久久国产精品www| 亚洲影院在线看| 亚洲国产精品大全| 一道本无吗dⅴd在线播放一区| 国产69精品久久久久9| 欧美性在线视频| 国产成人精品一区二区在线| 国模精品一区二区三区色天香| 色噜噜国产精品视频一区二区| 国产成人精品电影| 清纯唯美亚洲激情| 亚洲国产高清自拍| 北条麻妃99精品青青久久| 久久久久久尹人网香蕉| 欧美极度另类性三渗透| 久久精品99久久久香蕉| 久久久久久国产精品三级玉女聊斋| 亚洲一区www| 91精品视频网站| 久久久免费观看视频| 91精品成人久久| 国产欧美最新羞羞视频在线观看| 91精品久久久久久| 国产精品亚洲一区二区三区| 色偷偷噜噜噜亚洲男人的天堂| 久久久国产成人精品| 欧美高清视频免费观看| 亚洲网在线观看| 欧美黑人极品猛少妇色xxxxx| 亚洲日本成人女熟在线观看| 中文字幕亚洲一区二区三区| 久久亚洲精品中文字幕冲田杏梨|