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

首頁 > 學院 > 開發設計 > 正文

c# 線程

2019-11-17 02:20:23
字體:
來源:轉載
供稿:網友

c# 線程

線程的本質  線程不是一個計算機硬件的功能,而是操作系統提供的一種邏輯功能,線程本質上是進程中一段并發運行的代碼,所以線程需要操作系統投入CPU資源來運行和調度。

一、多線程的優缺點、使用范圍

優點:線程中的處理程序依然是順序執行,符合普通人的思維習慣,所以編程簡單;

缺點:線程的使用(濫用)會給系統帶來上下文切換的額外負擔。并且線程間的共享變量可能造成死鎖的出現;

適用范圍:需要長時間CPU運算的場合,例如耗時較長的圖形處理和算法執行。

二、線程的使用

線程函數通過委托傳遞,可以不帶參數,也可以帶參數(只能有一個參數),可以用一個類或結構體封裝參數。

namespace Test{    class PRogram    {        static void Main(string[] args)        {            Thread t1 = new Thread(new ThreadStart(TestMethod));            Thread t2 = new Thread(new ParameterizedThreadStart(TestMethod));            t1.IsBackground = true;            t2.IsBackground = true;            t1.Start();            t2.Start("hello");            Console.ReadKey();        }        public static void TestMethod()        {            Console.WriteLine("不帶參數的線程函數");        }        public static void TestMethod(object data)        {            string datastr = data as string;            Console.WriteLine("帶參數的線程函數,參數為:{0}", datastr);        }    } }三、線程池

由于線程的創建和銷毀需要耗費一定的開銷,過多的使用線程會造成內存資源的浪費,出于對性能的考慮,于是引入了線程池的概念。線程池維護一個請求隊列,線程池的代碼從隊列提取任務,然后委派給線程池的一個線程執行,線程執行完不會被立即銷毀,這樣既可以在后臺執行任務,又可以減少線程創建和銷毀所帶來的開銷。

線程池線程默認為后臺線程(IsBackground)。

namespace Test{    class Program    {        static void Main(string[] args)        {            //將工作項加入到線程池隊列中,這里可以傳遞一個線程參數            ThreadPool.QueueUserWorkItem(TestMethod, "Hello");            Console.ReadKey();        }        public static void TestMethod(object data)        {            string datastr = data as string;            Console.WriteLine(datastr);        }    }}

四、Task類

使用ThreadPool的QueueUserWorkItem()方法發起一次異步的線程執行很簡單,但是該方法最大的問題是沒有一個內建的機制讓你知道操作什么時候完成,有沒有一個內建的機制在操作完成后獲得一個返回值。為此,可以使用System.Threading.Tasks中的Task類。

構造一個Task<TResult>對象,并為泛型TResult參數傳遞一個操作的返回類型。

namespace Test{    class Program    {        static void Main(string[] args)        {            Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000);            t.Start();            t.Wait();            Console.WriteLine(t.Result);            Console.ReadKey();        }        private static Int32 Sum(Int32 n)        {            Int32 sum = 0;            for (; n > 0; --n)                checked{ sum += n;} //結果太大,拋出異常            return sum;        }    }}
一個任務完成時,自動啟動一個新任務。一個任務完成后,它可以啟動另一個任務,下面重寫了前面的代碼,不阻塞任何線程。
namespace Test{    class Program    {        static void Main(string[] args)        {            Task<Int32> t = new Task<Int32>(n => Sum((Int32)n), 1000);            t.Start();            //t.Wait();            Task cwt = t.ContinueWith(task => Console.WriteLine("The result is {0}",t.Result));            Console.ReadKey();        }        private static Int32 Sum(Int32 n)        {            Int32 sum = 0;            for (; n > 0; --n)                checked{ sum += n;} //結果溢出,拋出異常            return sum;        }    }}

五、委托異步執行

委托的異步調用:BeginInvoke() 和 EndInvoke()

namespace Test{    public delegate string MyDelegate(object data);    class Program    {        static void Main(string[] args)        {            MyDelegate mydelegate = new MyDelegate(TestMethod);            IAsyncResult result = mydelegate.BeginInvoke("Thread Param", TestCallback, "Callback Param");            //異步執行完成            string resultstr = mydelegate.EndInvoke(result);        }        //線程函數        public static string TestMethod(object data)        {            string datastr = data as string;            return datastr;        }        //異步回調函數        public static void TestCallback(IAsyncResult data)        {            Console.WriteLine(data.AsyncState);        }    }}

六、線程同步

  1)原子操作(Interlocked):所有方法都是執行一次原子讀取或一次寫入操作。

  2)lock()語句:避免鎖定public類型,否則實例將超出代碼控制的范圍,定義private對象來鎖定。

  3)Monitor實現線程同步

    通過Monitor.Enter() 和 Monitor.Exit()實現排它鎖的獲取和釋放,獲取之后獨占資源,不允許其他線程訪問。

    還有一個TryEnter方法,請求不到資源時不會阻塞等待,可以設置超時時間,獲取不到直接返回false。

  4)ReaderWriterLock

    當對資源操作讀多寫少的時候,為了提高資源的利用率,讓讀操作鎖為共享鎖,多個線程可以并發讀取資源,而寫操作為獨占鎖,只允許一個線程操作。

  5)事件(Event)類實現同步

    事件類有兩種狀態,終止狀態和非終止狀態,終止狀態時調用WaitOne可以請求成功,通過Set將時間狀態設置為終止狀態。

    1)AutoResetEvent(自動重置事件)

    2)ManualResetEvent(手動重置事件)

  6)信號量(Semaphore)

      信號量是由內核對象維護的int變量,為0時,線程阻塞,大于0時解除阻塞,當一個信號量上的等待線程解除阻塞后,信號量計數+1。

      線程通過WaitOne將信號量減1,通過Release將信號量加1,使用很簡單。

  7)互斥體(Mutex)

      獨占資源,用法與Semaphore相似。

  8)跨進程間的同步

      通過設置同步對象的名稱就可以實現系統級的同步,不同應用程序通過同步對象的名稱識別不同同步對象。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区欧美激情| 国产精品久久久久久久久| 日本一区二区三区四区视频| 欧美视频裸体精品| 91久久国产婷婷一区二区| 午夜欧美不卡精品aaaaa| 色老头一区二区三区| 亚洲人成在线观| 国产精品夜色7777狼人| 日韩高清免费观看| 国产精品网红直播| 亚洲已满18点击进入在线看片| 在线观看视频亚洲| 韩剧1988免费观看全集| 欧美高清视频在线播放| 亚洲福利在线看| 久久精品久久久久久国产 免费| 日韩在线播放视频| 日韩av影片在线观看| 日本欧美一二三区| 欧美人在线视频| 亚洲精品大尺度| 中文欧美日本在线资源| 亚洲国产美女久久久久| 九色91av视频| 5252色成人免费视频| 精品久久久久久久久国产字幕| 欧美与欧洲交xxxx免费观看| 亚洲精品456在线播放狼人| 欧美激情一区二区久久久| 亚洲色图av在线| 亚洲福利小视频| 亚洲毛片在线免费观看| 亚洲成人av在线播放| 国产精品免费一区| 高清亚洲成在人网站天堂| 久久精品国产一区| 欧美一级淫片播放口| 欧美日韩免费在线| 人人爽久久涩噜噜噜网站| 4438全国亚洲精品在线观看视频| 国产成人av在线| www.久久久久久.com| 国产精品久久久久久亚洲调教| 亚洲欧美精品suv| 久久久av免费| 国产一区二区三区直播精品电影| 日韩三级影视基地| 日韩视频免费在线观看| 国产精品伦子伦免费视频| 欧美激情在线一区| 久久视频国产精品免费视频在线| 精品久久久久久国产91| 亚洲一区精品电影| 一区国产精品视频| 国内精品伊人久久| 91视频国产一区| 久久国产精品久久国产精品| 亚洲一区二区黄| 成人免费淫片视频软件| 日韩视频一区在线| 日本精品视频在线播放| 国产精品第一页在线| 亚洲精品国精品久久99热| 日韩电影中文字幕| 欧美野外猛男的大粗鳮| 国产精品视频永久免费播放| 成人福利网站在线观看11| 国产精品丝袜白浆摸在线| 欧美成人精品h版在线观看| 俺去啦;欧美日韩| 亚洲国产黄色片| 国产激情久久久| 亚洲电影免费观看高清完整版在线观看| 性夜试看影院91社区| 欧美特级www| 亚洲午夜性刺激影院| 久久成人一区二区| 日韩成人在线网站| 日韩电影中文字幕| 成人黄色在线观看| 欧美二区在线播放| 一区二区三区久久精品| 欧美大片免费观看在线观看网站推荐| 国产精品久久久久久久7电影| 成人久久精品视频| 精品国产鲁一鲁一区二区张丽| 69av成年福利视频| 欧美大片欧美激情性色a∨久久| 亚洲jizzjizz日本少妇| 国产日韩在线看| 亚洲性无码av在线| 国产亚洲欧美另类中文| 国产精品视频xxxx| 亚洲大胆美女视频| 国产在线播放不卡| 精品国产成人av| 欧美日本在线视频中文字字幕| 日韩精品在线免费播放| 成人网欧美在线视频| 国产免费久久av| 欧美日韩国产一区二区| 91久久精品国产91久久性色| 亚洲人成啪啪网站| 国产日韩欧美在线看| 国产做受高潮69| 国产日韩欧美视频| 亚洲福利视频网站| 欧美精品在线免费| 日韩视频―中文字幕| 亚洲性猛交xxxxwww| 国产成人综合精品在线| 琪琪第一精品导航| 亚洲天堂av高清| 一区二区三区高清国产| 91精品国产免费久久久久久| 久久国产视频网站| 成人免费在线网址| 欧美午夜激情小视频| 亚洲人成网站999久久久综合| 精品亚洲男同gayvideo网站| 欧美激情2020午夜免费观看| 亚洲一区二区在线播放| 亚洲色无码播放| 成人xvideos免费视频| 91综合免费在线| 精品美女国产在线| 琪琪第一精品导航| 亚洲综合中文字幕在线观看| 亚洲一区二区久久久久久| 91精品啪aⅴ在线观看国产| 国产啪精品视频网站| 亚洲午夜久久久影院| 国产精品久久久久久久久久久久久| 福利视频导航一区| 国内精品模特av私拍在线观看| 亚洲精品久久视频| 欧美极品欧美精品欧美视频| 欧美日本高清一区| 国产精品入口日韩视频大尺度| 久久电影一区二区| 欧美日本亚洲视频| 国产精品盗摄久久久| 色av中文字幕一区| 91精品国产综合久久男男| 亚洲91精品在线| 亚洲片在线观看| 久久99久久久久久久噜噜| 欧美高清在线视频观看不卡| 国产成人精品视频在线| 米奇精品一区二区三区在线观看| 91色在线观看| 精品国产电影一区| 久久伊人91精品综合网站| 91色琪琪电影亚洲精品久久| 91久久国产综合久久91精品网站| 国产成人精品视频| 欧美精品免费在线观看| 国产精品va在线| 国产日韩欧美综合| 亚洲成人a级网| 久久亚洲国产成人| 国产成人一区二区三区小说| 国内揄拍国内精品|