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

歡迎訪問 生活随笔!

生活随笔

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

C#

C#中多线程同步的Monitor理解

發(fā)布時間:2025/4/14 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#中多线程同步的Monitor理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

.NET提供了System.Threading.Monitor類允許同一進城中的線程實現(xiàn)同步,是一種更快速、更輕量級的鎖機制。可以使用該類來保護對某些變量的訪問,或?qū)δ承┮淮沃荒茉谝粋€線程中執(zhí)行的代碼設置訪問權限。
使用實例(片段代碼):

readonly object theLock=new object();int num=0;#其他代碼...Monitor.Enter(theLock);try{++num;}finally{Monitor.Exit(theLock);}
  • Monitor與lock
    對以上代碼的解讀:
  • Monitor.Enter(theLock)獲得theLock對象鎖;Monitor.Exit(theLock)釋放theLock對象鎖;
  • 我們將所有對num變量的訪問以對象鎖的形式房在臨界區(qū),在每次訪問前,訪問者必須獲得theLock對象實例的鎖。theLock字段類型是 Object類型,它的實際類型無關緊要,但必須是引用類型即對象的實例,而不是值類型。為了安全起見,建議標記成readonly,以免theLock 被復制而造成混亂。
  • 上述代碼不夠簡潔,使用try/finally,而且一旦漏掉Monitor.Exit將會發(fā)生可怕的混亂。就此問題C#設計者引用了lock關鍵字,lock關鍵字代替了Monitor.Enter和Monitor.Exit,上述代碼可簡寫為: readonly object theLock=new object();int num=0;#其他代碼...lock(theLock){++num;}
  • 通知與等待
    • Monitor管理著兩個線程隊列:就緒隊列(ready隊列)和等待隊列(waiting隊列)。
    • ready隊列保存的是準備獲取鎖的線程,就是說,如果某個線程(幾座線程A)執(zhí)行了Monitor.Wait(),那么ready隊列中的第一個線程就會獲得鎖,開始運行;同時線程A自動進入waiting隊列中的隊尾進行排隊。
    • waiting隊列保存的是正在等待鎖對象狀態(tài)變化通知的線程,就是說如果某個線程執(zhí)行了Moniotr.Pulse(),那么waiting隊列中的對頭線程就進入ready隊列中。
    • 簡單地說即是當前線程執(zhí)行Monitor.Wait(),當前線程進入waiting隊列并取ready隊列對頭線程運行;執(zhí)行Monitor.Pulse把waiting隊列的對頭線程調(diào)入ready隊列。

轉(zhuǎn)載于:https://www.cnblogs.com/zhaiqianfeng/archive/2012/11/06/4617989.html

總結

以上是生活随笔為你收集整理的C#中多线程同步的Monitor理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。