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

首頁 > 編程 > C# > 正文

C#中的lock、Monitor、Mutex學習筆記

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

線程:線程是進程的獨立執行單元,每一個進程都有一個主線程,除了主線程可以包含其他的線程。

多線程的意義:多線程有助于改善程序的總體響應性,提高CPU的效率。

多線程的應用程序域是相當不穩定的,因為多個線程在同一時間內都能運行共享的功能模塊。為了保護應用程序的資源不被破壞,為多線程程序提供了三種加鎖的機制,分別是:Monitor類、Lock關鍵字和Mutex類。

1. lock

lock實現的功能是:使后進入的線程不會中斷當前的線程,而是等待當前線程結束后再繼續執行。

應用:

復制代碼 代碼如下:

   private Object thisLock=new object();

   lock(thisLock){
               //鎖定的代碼塊
    }

注意:避免鎖定 public 類型,否則實例將超出代碼的控制范圍。

常見的結構 lock (this)、lock (typeof (MyType)) 和 lock ("myLock")
違反此準則:如果實例可以被公共訪問,將出現 lock (this) 問題。
如果 MyType 可以被公共訪問,將出現 lock (typeof (MyType)) 問題。
由于進程中使用同一字符串的任何其他代碼將共享同一個鎖,所以出現 lock(“myLock”) 問題。
最佳做法是定義 private 對象來鎖定, 或 private static 對象變量來保護所有實例所共有的數據。
下面舉例說明lock的應用:
下面的例子中創建了5個次線程,次線程完成的任務就是:輸出線程編碼,延遲1秒,然后輸出當時的時間

Example:

復制代碼 代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication5 {
    class Program {
        static void Main(string[] args) {
        Console.WriteLine ("程序開始時間:"+DateTime.Now .ToString());
        Example ex=new Example ();
        Thread []threads=new  Thread[5];
        for (int i=0;i<5;i++)
        {
        threads[i]=new Thread (new ThreadStart(ex.OutPut));
        threads[i].Name =string.Format ("Worker thread#{0}",i) ;
        }
        foreach(Thread t in threads){
        t.Start();
        }
        Console.WriteLine("主線程最后一句代碼!"+DateTime.Now.ToString());
        }
    }
    class Example{
    private static object  thisLock=new object ();
    public void OutPut()
    {   
    lock(thisLock){
    Console .WriteLine("->{0}",Thread.CurrentThread.Name);
    Thread.Sleep(1000);
    Console.WriteLine(DateTime.Now);
    }
    }
   
    }
}

實驗結果如下:

           圖1:加lock

      圖2:沒有lock    

從實驗結果可以看出,加lock后,程序每次只能執行一個線程,只有當前線程執行完了,才會執行下一個線程未加lock,程序執行混亂,容易阻塞。

2. Monitor

lock是對Monitor的Enter和Exit的一個封裝,因此Monitor類的Enter()和Exit()方法的組合使用可以用lock關鍵字替代。

Monitor類除了具有lock的功能外,還有以下功能:

TryEnter()解決長期死等的問題,如果一個并發經常發生,并且持續時間很長,使用TryEnter,可以有效防止死鎖或者長時間 的等待。    

Wait()釋放對象上的鎖,以便允許其他線程鎖定和訪問該對象。在其他線程訪問對象時,調用線程將等待。脈沖信號用于通知等待線程有關對象狀態的更改。

Pulse(),PulseAll()向一個或多個等待線程發送信號。該信號通知等待線程鎖定對象的狀態已更改,并且鎖的所有者準備釋放該鎖。等待線程被放置在對象的就緒隊列中以便它可以最后接收對象鎖。一旦線程擁有了鎖,它就可以檢查對象的新狀態以查看是否達到所需狀態。

注意:Pulse、PulseAll和Wait方法必須從同步的代碼塊內調用。

3. Mutex(互斥體)

Mutex的突出特點是可以跨應用程序域邊界對資源進行獨占訪問,即可以用于同步不同進程中的線程,這種功能是以犧牲更多的系統資源為代價的。    

互斥體Mutex和事件對象EventWaitHandler屬于內核對象,利用內核對象進行線程同步,線程必須要在用戶模式和內核模式間切換,所以一般效率很低,但利用互斥對象和事件對象這樣的內核對象,可以在多個進程中的各個線程間進行同步。

互斥體Mutex類似于一個接力棒,拿到接力棒的線程才可以開始跑,當然接力棒一次只屬于一個線程(Thread Affinity),如果這個線程不釋放接力棒(Mutex.ReleaseMutex),那么其他所有需要接力棒運行的線程只能等著看熱鬧。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丝袜情趣国产精品| 成人xxxx视频| 国产噜噜噜噜久久久久久久久| 亚洲精品久久久一区二区三区| 萌白酱国产一区二区| 一本大道香蕉久在线播放29| 国产精品网红直播| 欧美电影在线观看高清| 国产午夜精品久久久| 欧美一区二区三区……| 91亚洲精品一区| 国产精品久久999| 久久久综合av| 在线观看久久av| 日本午夜精品理论片a级appf发布| 日韩电影网在线| 国产精品久久久久7777婷婷| 2018国产精品视频| 国产99久久精品一区二区永久免费| 91精品在线看| 久久久久国产视频| 久久伊人精品一区二区三区| 久久精品一偷一偷国产| 色yeye香蕉凹凸一区二区av| 情事1991在线| 日韩精品免费在线| 91亚洲精品在线| 热re99久久精品国产66热| 日韩电影免费观看在线观看| 亚洲男人天堂2023| 国产免费一区二区三区在线能观看| 欧美裸体视频网站| 亚洲天堂av综合网| 久久久久久久一区二区三区| 久久久久久久久电影| 欧美区二区三区| 日韩精品日韩在线观看| 欧美中文在线观看| 久色乳综合思思在线视频| 日韩电影大全免费观看2023年上| 国产日韩欧美日韩大片| 成人黄色大片在线免费观看| 欧美极品欧美精品欧美视频| 午夜精品久久久久久久男人的天堂| 亚洲免费人成在线视频观看| 欧美日韩亚洲一区二区三区| 国外视频精品毛片| 欧美大片在线看| 福利精品视频在线| 亚洲字幕一区二区| 日本不卡免费高清视频| 国产精品一区二区在线| 亚洲激情自拍图| 亚洲欧美综合另类中字| 亚洲国产精品系列| 中文字幕成人在线| 中文字幕精品久久| 欧美一区三区三区高中清蜜桃| 欧美老肥婆性猛交视频| 欧美丝袜一区二区| 亚洲乱码国产乱码精品精| 亚洲人成电影网站色xx| 欧美二区在线播放| 欧美亚洲第一区| 欧洲成人免费aa| 欧美亚洲免费电影| 亚洲精品中文字| 国产精品成人观看视频国产奇米| 色婷婷综合久久久久| 国产欧美久久久久久| 日韩av在线免费观看一区| 成人免费看吃奶视频网站| 国内久久久精品| 九九热最新视频//这里只有精品| 亚洲缚视频在线观看| 韩日欧美一区二区| 91在线色戒在线| 国产日韩欧美91| 黄色成人av在线| 午夜精品久久久久久久99热| 伊人成人开心激情综合网| 国产精品视频在线播放| 国产精品视频久久久| 欧美性猛xxx| 欧美精品一本久久男人的天堂| 亚洲成人中文字幕| 777精品视频| 欧美性高潮在线| 欧美裸体xxxxx| 国产亚洲欧美一区| 日韩精品亚洲元码| 中文字幕日韩综合av| 久久久久久91| 最好看的2019的中文字幕视频| 欧美日韩激情小视频| 九九久久精品一区| 国产中文字幕日韩| 亚洲精品国偷自产在线99热| 美女999久久久精品视频| 欧美性猛交xxxx免费看| 亚洲理论片在线观看| 欧美一级片免费在线| 在线日韩中文字幕| 国产成人综合亚洲| 国产日韩av在线播放| 92看片淫黄大片看国产片| 在线免费看av不卡| 欧美性猛交xxxx黑人猛交| 国产亚洲精品美女久久久久| 欧美成人精品在线观看| 国内外成人免费激情在线视频| 久久精品国产久精国产一老狼| 久久中文精品视频| 久久久久久亚洲精品中文字幕| 日韩av电影手机在线| 91精品久久久久久综合乱菊| 91亚洲精品视频| 日本午夜精品理论片a级appf发布| 日韩精品极品在线观看播放免费视频| 日韩欧美在线网址| 91经典在线视频| 亚洲丁香婷深爱综合| 成人网欧美在线视频| 九九视频这里只有精品| 国产成人涩涩涩视频在线观看| 久久中国妇女中文字幕| 亚洲激情在线观看| 97视频在线观看视频免费视频| 国产欧亚日韩视频| 亚洲免费电影在线观看| 国产欧美日韩中文字幕在线| 国产91精品高潮白浆喷水| 国外成人性视频| 91免费看视频.| 亚洲最大福利网| 国产婷婷色综合av蜜臀av| 麻豆国产va免费精品高清在线| 精品美女国产在线| 国产日韩在线一区| 国产欧美中文字幕| 中文在线资源观看视频网站免费不卡| 中文字幕最新精品| 久久福利网址导航| 精品二区三区线观看| 欧美视频一区二区三区…| 亚洲国产欧美自拍| 91在线免费观看网站| www.亚洲免费视频| 狠狠干狠狠久久| 欧美亚洲国产成人精品| 蜜臀久久99精品久久久久久宅男| 中文字幕自拍vr一区二区三区| 国产成人a亚洲精品| 国产精品自拍偷拍| 久久99热精品这里久久精品| 欧美性猛交丰臀xxxxx网站| 欧美激情精品久久久久久蜜臀| 欧美专区国产专区| 国产成人在线视频| 国产一区二区免费| 亚洲精品按摩视频| 亚洲国产又黄又爽女人高潮的| 中文字幕日本精品| 69久久夜色精品国产69乱青草|