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

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

【.NET深呼吸】線程信號量(Semaphore)

2019-11-14 15:51:48
字體:
來源:轉載
供稿:網友

Semaphore類可以控制某個資源允許訪問的線程數,Semaphore有命名式的,也有不命名的;如果不考慮跨進程工作,一般在代碼中使用不命名方式即可。

信號量有點類似于等待句柄,某個線程如果調用了WaitOne方法,這個線程就會暫停,并且等待有可用的信號量時才會繼續執行;某個線程調用Release方法,就會釋放一個信號計數值,每調用一次就釋放一個,如果想一次性釋放N個信號,可以調用Release(int)重載,把要釋放的數量傳遞給方法參數,但這個數值不能超過Semaphore實例化時所指定的最大值,否則會引發異常。

Semaphore構造函數可以指定允許的最大信號量,以及默認的信號量。聲明如下:

Semaphore(int initialCount, int maximumCount);

maximumCount參數指定該對象允許的最大信號量;initialCount參數指定默認值,這個默認值不能超過maximumCount指定的最大值。即該Semaphore實例默認允許多少個線程收到信號(訪問資源)。

當某個占用資源的線程調用Release方法后,它會釋放出一個或多個信號,這時候,其他等待的線程就可以繼續執行。

 

只要是涉及到線程問題都特別難說清楚,相當抽象,相當考驗人的理解能力。

比如,圖書館里面有五本《X瓶梅》,但想借這本書的有20人。前面五個人自然很輕松就借到(進入訪問圈,這五個線程以外的線程等待),其他人只好等了。

過了幾天后,有個家伙通宵看書,終于看完了,因此他還了書,這時候,剩下的15個人看誰的動作快,可以借到剛還回去的這本書。

再過了幾天,又有兩個人看完了,還書。此時,剩下的14個人中,有兩個人可以借得此書。

 

大概的原理就是這樣,下面看看例子。

    class PRogram    {        // 生成隨機數,以延遲每個任務的執行時間        static Random rand = new Random();        // 聲明Semaphore變量,以控制線程信號量        static Semaphore sm = null;        static void Main(string[] args)        {            sm = new Semaphore(1, 4); //實例化            // 啟動10個任務            for (int i = 0; i < 10; i++)            {                Task t = new Task(DoWork, "任務" + (i + 1));                t.Start();            }            // 防止DOS窗口立即退出            Console.Read();        }        private static async void DoWork(object p)        {            sm.WaitOne(); //等待花開            string tn = p?.ToString();            Console.WriteLine($"{tn} 已獲得訪問。");            await Task.Delay(rand.Next(1, 10) * 1000);            // 釋放            sm.Release(); //花謝了            Console.WriteLine($"{tn}已釋放。");        }    }

 

多線程開發我最喜歡用Task類,方便簡單強大好用高大上,而且它還能自行處理CPU多個核的問題。在上面例子中,有10個任務要執行,但我所實例化的Semaphore對象給的最大訪問線程數為4,而默認狀態下只允許1個線程同時訪問。

所以,10個任務啟動后,其中一個會搶到訪問權,其他任務就等吧。這時候Semaphore對象可訪問數為0。因為默認只允許1,現在有一個線程搶了,所以剩下就是0個訪問權了。

當這個搶到訪問權的任務調用Release方法后,訪問權被釋放,這時候剩下的9個任務就開始搶,誰搶到誰就執行&hellip;…依此類推。

 

看看運行結果。

 

任務1手快,它先搶到了訪問權,于是它dododo,do完后,調用Release方法釋放,然后任務3人品好,就搶到了訪問權,然后XXXXX,X完后調用Release釋放。其他線程繼續搶……

 

估計看完以上例子后,大家應該有點頭緒了。

現在,我們把上面的代碼改一下,在初始化Semaphore對象時的默認值從1改為3。

sm = new Semaphore(3, 4);

默認允許3個線程同時訪問資源,最大數量為4。

然后再次運行,結果如下:

 

因為默認允許3個線程同時進入,所以在輸出結果中,前面三個任務都能獲取訪問權,而其他的任務只能等待機會。當前面已獲得資源的三個任務中有一個或者N個進行釋放后,剩下的任務又開始搶機會。

 

本文示例下載地址:http://files.VEVb.com/files/tcjiaan/DemoApp.zip

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品xxx| 91夜夜揉人人捏人人添红杏| 国产香蕉一区二区三区在线视频| 亚洲精品欧美日韩| 久久69精品久久久久久久电影好| 欧美裸体视频网站| 日本伊人精品一区二区三区介绍| 中国china体内裑精亚洲片| 久久99青青精品免费观看| 欧美成人午夜激情在线| 97精品伊人久久久大香线蕉| 国产69精品久久久久9999| 日本三级韩国三级久久| 色青青草原桃花久久综合| 日韩大胆人体377p| 国色天香2019中文字幕在线观看| 久久久久久久久久久免费| 亚洲精品720p| 在线成人激情黄色| 欧美主播福利视频| 永久555www成人免费| 国产乱人伦真实精品视频| 欧美视频不卡中文| 97成人精品区在线播放| 国产免费亚洲高清| 欧美性生交xxxxxdddd| 精品色蜜蜜精品视频在线观看| 亚洲第一区在线观看| 国产精品一区久久久| 操人视频在线观看欧美| 亚洲男人第一网站| 亚洲美女www午夜| 精品福利樱桃av导航| 色中色综合影院手机版在线观看| 亚洲bt欧美bt日本bt| 久久综合色88| 亚洲第一区在线| 欧美日本高清视频| 亚洲小视频在线观看| 国产精品视频资源| 欧美午夜片在线免费观看| 亚洲加勒比久久88色综合| 亚洲人免费视频| 黑人与娇小精品av专区| 欧美午夜久久久| 亚洲男人的天堂网站| 国内精久久久久久久久久人| 欧美高清在线观看| 伊人久久综合97精品| 成人黄色网免费| 国产视频欧美视频| 久久国产精品亚洲| 欧美日韩一区二区在线播放| 欧美精品18videos性欧美| 日韩av在线网址| 亚洲黄页视频免费观看| 欧美日韩性视频在线| 最近日韩中文字幕中文| 91精品中文在线| 性欧美亚洲xxxx乳在线观看| 国自产精品手机在线观看视频| 欧美在线观看日本一区| 国产有码在线一区二区视频| 91高潮在线观看| 在线日韩第一页| 国产999精品久久久影片官网| 中文字幕日韩欧美精品在线观看| 日本一欧美一欧美一亚洲视频| 国产精品91一区| 少妇高潮久久久久久潘金莲| 黄色成人av在线| 国产精品久久在线观看| 国产精品美女av| 国产一区二区三区免费视频| 国产不卡视频在线| 成人av番号网| 欧美黄色小视频| 97视频人免费观看| 91探花福利精品国产自产在线| 国产香蕉精品视频一区二区三区| 久久久伊人欧美| 国产日韩精品一区二区| 黑人巨大精品欧美一区二区三区| 欧美日韩国产综合新一区| 神马久久桃色视频| 久久视频在线播放| 91精品国产色综合| 国产精品久久77777| 欧美激情乱人伦一区| 国产亚洲欧洲高清一区| 欧美亚洲另类视频| 日韩av在线天堂网| 91欧美精品午夜性色福利在线| 这里只有精品视频| 日韩av一区二区在线| 人妖精品videosex性欧美| 欧美二区在线播放| 欧美日韩一区二区免费视频| 538国产精品一区二区在线| 欧美一区亚洲一区| 亚洲老头同性xxxxx| 69影院欧美专区视频| 88xx成人精品| 亚洲在线视频观看| 欧美日韩精品在线视频| 成人福利在线视频| 成人午夜激情免费视频| 国产精品免费福利| 日本欧美精品在线| www.亚洲人.com| 久久91亚洲精品中文字幕奶水| 成人情趣片在线观看免费| 中文字幕欧美国内| 久久久久久久成人| 不卡伊人av在线播放| 国模精品视频一区二区| 97视频免费观看| 国产精品久久久久久婷婷天堂| 国产精品青草久久久久福利99| 91精品中文在线| 91精品久久久久久久久中文字幕| 日韩中文字幕视频| 久久亚洲国产成人| 欧美日韩国产精品| 91精品在线影院| 精品中文字幕视频| 久久久久久美女| 日韩精品免费在线视频观看| 亚洲美女自拍视频| 精品国产一区二区三区久久久| 国产成人a亚洲精品| 亚洲第一天堂无码专区| 久久久视频精品| 欧美日本精品在线| 欧美日韩精品在线观看| 国产精品第三页| 亚洲精品一区二区三区婷婷月| 国产91精品久久久久久| 国产精品国产三级国产aⅴ9色| 亚洲精品自拍偷拍| 日韩在线观看高清| 日韩av免费一区| 精品久久久国产| 97在线视频免费播放| 久久久黄色av| 精品国产一区二区三区久久久狼| 国产91网红主播在线观看| 亚洲一二在线观看| 久久精品国产亚洲| 亚洲石原莉奈一区二区在线观看| 亚洲黄色av网站| 中文字幕日韩av综合精品| 亚洲欧美日韩国产中文专区| 亚洲精品美女久久| 成人在线视频网站| 欧美日韩国产成人在线| 欧美自拍大量在线观看| 久久精品一偷一偷国产| 日韩成人中文字幕在线观看| 欧美精品videossex性护士| 亚洲国产精品久久久久秋霞蜜臀| 成人高清视频观看www| 成人h视频在线观看播放| 欧美性一区二区三区|