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

首頁 > 編程 > C# > 正文

C#多線程學習之(六)互斥對象用法實例

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

本文實例講述了C#多線程學習之互斥對象用法。分享給大家供大家參考。具體分析如下:

如何控制好多個線程相互之間的聯系,不產生沖突和重復,這需要用到互斥對象,即:System.Threading 命名空間中的 Mutex 類。

我們可以把Mutex看作一個出租車,乘客看作線程。乘客首先等車,然后上車,最后下車。當一個乘客在 車上時,其他乘客就只有等他下車以后才可以上車。而線程與Mutex對象的關系也正是如此,線程使用Mutex.WaitOne()方法等待Mutex對 象被釋放,如果它等待的Mutex對象被釋放了,它就自動擁有這個對象,直到它調用Mutex.ReleaseMutex()方法釋放這個對象,而在此期 間,其他想要獲取這個Mutex對象的線程都只有等待。

下面這個例子使用了Mutex對象來同步四個線程,主線程等待四個線程的結束,而這四個線程的運行又是與兩個Mutex對象相關聯的。

其中還用到AutoResetEvent類的對象,可以把它理解為一個信號燈。這里用它的有信號狀態來表示一個線程的結束。
AutoResetEvent.Set()方法設置它為有信號狀態
AutoResetEvent.Reset()方法設置它為無信號狀態

Mutex 類的程序示例:

using System;using System.Threading;namespace ThreadExample{ public class MutexSample { static Mutex gM1; static Mutex gM2; const int ITERS = 100; static AutoResetEvent Event1 = new AutoResetEvent(false); static AutoResetEvent Event2 = new AutoResetEvent(false); static AutoResetEvent Event3 = new AutoResetEvent(false); static AutoResetEvent Event4 = new AutoResetEvent(false); public static void Main(String[] args) { Console.WriteLine("Mutex Sample "); //創建一個Mutex對象,并且命名為MyMutex gM1 = new Mutex(true,"MyMutex"); //創建一個未命名的Mutex 對象. gM2 = new Mutex(true); Console.WriteLine(" - Main Owns gM1 and gM2"); AutoResetEvent[] evs = new AutoResetEvent[4]; evs[0] = Event1; //為后面的線程t1,t2,t3,t4定義AutoResetEvent對象 evs[1] = Event2;  evs[2] = Event3;  evs[3] = Event4;  MutexSample tm = new MutexSample( ); Thread t1 = new Thread(new ThreadStart(tm.t1Start)); Thread t2 = new Thread(new ThreadStart(tm.t2Start)); Thread t3 = new Thread(new ThreadStart(tm.t3Start)); Thread t4 = new Thread(new ThreadStart(tm.t4Start)); t1.Start( ); //使用Mutex.WaitAll()方法等待一個Mutex數組中的對象全部被釋放 t2.Start( ); //使用Mutex.WaitOne()方法等待gM1的釋放 t3.Start( ); //使用Mutex.WaitAny()方法等待一個Mutex數組中任意一個對象被釋放 t4.Start( ); //使用Mutex.WaitOne()方法等待gM2的釋放 Thread.Sleep(2000); Console.WriteLine(" - Main releases gM1"); gM1.ReleaseMutex( ); //線程t2,t3結束條件滿足 Thread.Sleep(1000); Console.WriteLine(" - Main releases gM2"); gM2.ReleaseMutex( ); //線程t1,t4結束條件滿足 //等待所有四個線程結束 WaitHandle.WaitAll(evs);  Console.WriteLine(" Mutex Sample"); Console.ReadLine(); } public void t1Start( ) { Console.WriteLine("t1Start started, Mutex.WaitAll(Mutex[])"); Mutex[] gMs = new Mutex[2]; gMs[0] = gM1; //創建一個Mutex數組作為Mutex.WaitAll()方法的參數 gMs[1] = gM2; Mutex.WaitAll(gMs); //等待gM1和gM2都被釋放 Thread.Sleep(2000); Console.WriteLine("t1Start finished,Mutex.WaitAll(Mutex[]) satisfied"); Event1.Set( ); //線程結束,將Event1設置為有信號狀態 } public void t2Start( ) { Console.WriteLine("t2Start started, gM1.WaitOne( )"); gM1.WaitOne( );//等待gM1的釋放 Console.WriteLine("t2Start finished, gM1.WaitOne( ) satisfied"); Event2.Set( );//線程結束,將Event2設置為有信號狀態 } public void t3Start( ) { Console.WriteLine("t3Start started, Mutex.WaitAny(Mutex[])"); Mutex[] gMs = new Mutex[2]; gMs[0] = gM1;//創建一個Mutex數組作為Mutex.WaitAny()方法的參數 gMs[1] = gM2; Mutex.WaitAny(gMs);//等待數組中任意一個Mutex對象被釋放 Console.WriteLine("t3Start finished, Mutex.WaitAny(Mutex[])"); Event3.Set( );//線程結束,將Event3設置為有信號狀態 } public void t4Start( ) { Console.WriteLine("t4Start started, gM2.WaitOne( )"); gM2.WaitOne( );//等待gM2被釋放 Console.WriteLine("t4Start finished, gM2.WaitOne( )"); Event4.Set( );//線程結束,將Event4設置為有信號狀態 } }}

程序的輸出結果:

Mutex Sample  - Main Owns gM1 and gM2t1Start started, Mutex.WaitAll(Mutex[])t2Start started, gM1.WaitOne( )t3Start started, Mutex.WaitAny(Mutex[])t4Start started, gM2.WaitOne( ) - Main releases gM1t2Start finished, gM1.WaitOne( ) satisfiedt3Start finished, Mutex.WaitAny(Mutex[]) - Main releases gM2t1Start finished, Mutex.WaitAll(Mutex[]) satisfiedt4Start finished, gM2.WaitOne( ) Mutex Sample

從執行結果可以很清楚地看到,線程t2,t3的運行是以gM1的釋放為條件的,而t4在gM2釋放后開始 執行,t1則在gM1和gM2都被釋放了之后才執行。Main()函數最后,使用WaitHandle等待所有的AutoResetEvent對象的信 號,這些對象的信號代表相應線程的結束。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久久久久久av| 中文字幕亚洲激情| 91久久精品视频| 伊人久久综合97精品| 亚洲激情视频网| 日韩av电影在线免费播放| 国产精品对白刺激| 国产精品久久电影观看| 91精品视频免费观看| 91九色在线视频| 成人免费激情视频| 日韩av综合网| 日韩黄色在线免费观看| 精品视频在线播放| 久久国产加勒比精品无码| 黄色一区二区三区| 一区二区三区视频观看| 中文字幕欧美国内| 欧美成人精品在线| 国产成人精品免高潮费视频| 国产精品video| 亚洲第一av网站| 亚洲影院色在线观看免费| 久久影院模特热| 91久久精品在线| 欧美成人中文字幕| 国产精品自拍视频| 91探花福利精品国产自产在线| 国产剧情久久久久久| 精品中文字幕在线2019| 成人97在线观看视频| 精品久久国产精品| 日本aⅴ大伊香蕉精品视频| 国产日产欧美a一级在线| 欧美肥婆姓交大片| 国产精品久久不能| 91精品国产高清| 精品亚洲国产成av人片传媒| 亚洲精品中文字幕有码专区| 国产精品青草久久久久福利99| 69**夜色精品国产69乱| 不卡av在线播放| 国产性猛交xxxx免费看久久| 亚洲第一区中文字幕| 国产成人精品一区二区| 成人有码在线播放| 欧美激情视频网| 人人澡人人澡人人看欧美| 深夜福利91大全| 97超碰蝌蚪网人人做人人爽| 成人av资源在线播放| 精品av在线播放| 在线视频亚洲欧美| 欧美中文字幕在线观看| 亚洲香蕉成视频在线观看| 国产精品激情av电影在线观看| 91久久久久久久久久| 国产视频观看一区| 欧美噜噜久久久xxx| 国产精品高潮呻吟久久av黑人| 久久亚洲精品一区| 精品久久久久久中文字幕大豆网| 久久久久久国产精品三级玉女聊斋| 国产在线精品自拍| 色偷偷av亚洲男人的天堂| 亚洲影视中文字幕| 亚洲毛片在线观看.| 日韩精品极品在线观看| 国产精品丝袜一区二区三区| 在线播放国产一区二区三区| 亚洲奶大毛多的老太婆| 亚洲片av在线| 欧美做受高潮电影o| 91av在线播放| 亚洲一区二区三区久久| 国产精品久久精品| 久久香蕉国产线看观看av| 成人精品一区二区三区电影黑人| 中文字幕成人精品久久不卡| 中文字幕欧美精品在线| 亚洲第一区在线| 久久精品人人做人人爽| 欧美成人一区二区三区电影| 日韩精品在线第一页| 国产精品亚洲一区二区三区| 国产福利视频一区| 午夜欧美不卡精品aaaaa| 欧美激情aaaa| 精品久久久久久久大神国产| 国产日韩中文在线| 欧美裸体xxxx极品少妇软件| 国产亚洲精品久久久久久| 亚洲韩国日本中文字幕| 亚洲视频欧美视频| 欧美日本高清视频| 黑丝美女久久久| 91欧美激情另类亚洲| 日韩一中文字幕| 欧美激情2020午夜免费观看| 国产一区二区三区18| 北条麻妃一区二区三区中文字幕| 国产成人精品在线视频| 国产一区二区丝袜| 成人综合国产精品| 91视频国产一区| 欧美巨猛xxxx猛交黑人97人| 欧美成在线观看| 在线播放日韩av| 欧美激情2020午夜免费观看| xxxx欧美18另类的高清| 麻豆国产va免费精品高清在线| 97av在线视频| 欧美成人免费在线视频| 91产国在线观看动作片喷水| 国产va免费精品高清在线| 欧美一区二区三区艳史| 欧美成人激情在线| 91久久国产婷婷一区二区| 日韩精品在线看| 国产精品一区av| 欧美黑人极品猛少妇色xxxxx| 亚洲欧美日韩精品久久奇米色影视| 中文国产成人精品久久一| 国产精品第8页| 亚洲激情电影中文字幕| 精品中文字幕久久久久久| 另类色图亚洲色图| 久久国产天堂福利天堂| 91久久久久久久久久| 久久久久久国产精品美女| 欧美日韩一区二区三区| 国产大片精品免费永久看nba| 亚洲在线免费视频| 美女久久久久久久| 国产精品视频免费在线观看| 日韩免费高清在线观看| 亚洲精品videossex少妇| 一区三区二区视频| 国产999精品久久久影片官网| 国产午夜精品理论片a级探花| 国产91久久婷婷一区二区| 最新国产精品拍自在线播放| 欧美电影免费在线观看| 中文字幕在线国产精品| 亚洲国产精品推荐| 色伦专区97中文字幕| 欧美电影免费观看网站| 国产精品成熟老女人| 亚洲午夜久久久影院| 日韩中文字幕网站| 国产精品91在线观看| 久久久电影免费观看完整版| 91九色综合久久| 国产精品69av| 国产精品亚洲精品| 精品国产一区二区三区四区在线观看| 欧美xxxx做受欧美| 久久视频精品在线| 国产一区香蕉久久| 久热精品视频在线免费观看| 亚洲日韩欧美视频| 操日韩av在线电影| 国产成人精品综合| 成人欧美一区二区三区黑人|