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

首頁 > 編程 > C# > 正文

深入多線程之:用Wait與Pulse模擬一些同步構造的應用詳解

2020-01-24 03:19:46
字體:
來源:轉載
供稿:網友

你可能在上篇文章中《深入多線程之:雙向信號與競賽的用法分析》注意到了這個模式:兩個Waiting 循環都要下面的構造:

復制代碼 代碼如下:

lock(_locker)
{
        while(!_flag) Monitor.Wait(_locker);
        _flag = false;
}


在這里_flag被另一線程設置為true。這是,從作用上講,這里在模仿AutoResetEvent。如果我們將 _flag = false;去掉,那么我們就得到了一個基本的ManualResetEvent.

讓我們使用Wait和Pulse來為ManualResetEvent完成剩余的代碼吧。

復制代碼 代碼如下:

readonly object _locker = new object();
        bool _signal;

        void WaitOne()
        {
            lock (_locker)
            {
                while (!_signal) Monitor.Wait(_locker);
            }
        }

        void Set()
        {
            lock (_locker) { _signal = true; Monitor.PulseAll(_locker); }
        }

        void Reset() { lock (_locker) _signal = false; }


在這里使用PulseAll,是因為可能有很多阻塞的線程。

如果在WaitOne方法中增加_signal=false就可以簡單的模擬AutoResetEvent.例如:

復制代碼 代碼如下:

void WaitOne()
        {
            lock (_locker)
            {
                while (!_signal) Monitor.Wait(_locker);
                _signal = false; //實現自動關閉功|能
            }
        }

然后在Set方法中,將PulseAll修改為Pulse

Lock(_locker) {_signal = true; Monitor.Pulse(_locker);}

如果使用的是int類型的_signal 標志,那么我們可以得到一個最基本的Semaphore.

Waiting Queues and PulseAll

當多余一個線程在同一個對象上面等待的時候,一個 “等待隊列(waiting queue)” 就形成了。

每一次調用Pulse都會釋放在”等待隊列”頭部的一個線程。下面的圖形象的展示了這一點:

 

線程調用Monitor.Enter 進入ReadyQueue. 等待獲取鎖,成功獲取鎖后,如果正常的執行,那么之后會調用Monitor.Exit退出,

否則如果獲取了鎖之后發現需要等待其他的線程或者是其他阻塞條件,那么調用Wait方法,就進入了等待隊列,

當等待的線程完成并調用Pulse后,處在WaitingQueue頭部的線程就被 Pulse了,等待CPU調度 。之后再次進入Ready Queue,重新獲取鎖。


Countdown

借助Wait和Pulse,我們可以實現CountdownEvent的主要功能。例如:

復制代碼 代碼如下:

class Countdown
    {
        object _locker = new object();
        int _value; //使用_value來計數

        public Countdown() { }
        public Countdown(int initialCount) { _value = initialCount; }

        public void Singnal() { AddCount(-1); } //將計數減一

        public void AddCount(int amount)
        {
            lock (_locker)
            {
                _value += amount; //將計數增加或減少
                if (_value <= 0) Monitor.PulseAll(_locker);//如果value<=0,說明所有等待的任務都完成了。
            }
        }

        public void Wait()
        {
            lock (_locker)
            {
                //只要計數 > 0 就等待。
                while (_value > 0)
                {
                    Monitor.Wait(_locker);
                }
            }
        }
}


這和我們上次的代碼幾乎一致,只是這次我們的阻塞條件基于一個整型_value標志。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
狠狠躁夜夜躁人人躁婷婷91| 亚洲国产精彩中文乱码av在线播放| 18久久久久久| 国产精品入口日韩视频大尺度| 国产日韩精品在线| 欧美成人精品影院| 91在线观看免费网站| 视频在线观看一区二区| 国产美女91呻吟求| 日韩av在线影视| 国产精品一区二区久久久久| 亚洲欧美另类中文字幕| 欧美激情日韩图片| 日韩网站免费观看| 中文字幕日韩免费视频| 一个色综合导航| 欧美肥老太性生活视频| 亚洲色图第一页| 国产精品久久久久久av下载红粉| 国产成人精品a视频一区www| 91夜夜未满十八勿入爽爽影院| 91久久精品日日躁夜夜躁国产| 久久久亚洲精选| 欧美国产日本高清在线| 亚洲男人天堂视频| 色偷偷噜噜噜亚洲男人的天堂| 成人免费视频网| 欧美疯狂xxxx大交乱88av| 欧美亚洲另类激情另类| 国产精品国产三级国产专播精品人| 成人午夜在线视频一区| 波霸ol色综合久久| 久久久久久91香蕉国产| 亚洲欧美制服综合另类| 亚洲欧洲在线播放| 91成人精品网站| 久久亚洲精品国产亚洲老地址| 亚洲视频在线播放| 国产日韩欧美夫妻视频在线观看| www.欧美免费| 国产成人亚洲综合| 欧美孕妇毛茸茸xxxx| 久久频这里精品99香蕉| 久久久久久com| 欧美精品videos| 热99久久精品| 国产精品福利网站| 成人免费视频网| 日韩精品视频中文在线观看| 欧美成在线视频| 欧美一级片一区| 庆余年2免费日韩剧观看大牛| 亚洲视频在线观看网站| 日韩在线视频线视频免费网站| 久久视频免费在线播放| 日韩精品在线观看一区| 97免费视频在线| 久久免费国产视频| 成人免费直播live| 久久精品亚洲一区| 日韩亚洲欧美中文在线| 国产69久久精品成人| 色99之美女主播在线视频| 9.1国产丝袜在线观看| 欧美夫妻性生活视频| 九九热这里只有精品6| 日韩av在线网| 2019亚洲男人天堂| 欧美裸体视频网站| 日韩精品在线观| 国产午夜一区二区| 中文字幕成人在线| 国产精品户外野外| 亚洲欧美一区二区精品久久久| 亚洲免费电影一区| 欧美成人免费观看| 欧美美女18p| 成人av电影天堂| 日韩中文av在线| 日韩精品极品在线观看| 亚洲国产天堂久久综合网| 亚洲精品久久久久久久久久久久| 91日本视频在线| 成人有码视频在线播放| 国产精品aaaa| 欧美亚洲成人精品| 亚洲精品网址在线观看| 一区二区欧美久久| 亚洲欧美国产一区二区三区| 欧美尤物巨大精品爽| 夜夜躁日日躁狠狠久久88av| 亚洲女人天堂色在线7777| 日韩av一区二区在线观看| 国产精品va在线| 日韩av观看网址| 欧美成人一二三| 国产精品一区二区av影院萌芽| 日韩av色综合| 日韩电影大全免费观看2023年上| 国产成人精彩在线视频九色| 亚洲精品福利免费在线观看| 日本成熟性欧美| 国产精品一区电影| 亚洲精品综合精品自拍| 日韩电影免费在线观看中文字幕| 久久久999国产| 欧美高跟鞋交xxxxhd| 亚洲第一网站男人都懂| www欧美日韩| 川上优av一区二区线观看| www国产91| 亚洲欧美在线第一页| 成人女保姆的销魂服务| 欧美电影免费观看高清完整| 亚洲精品国产精品乱码不99按摩| 激情成人在线视频| 欧美在线中文字幕| 欧美国产日本高清在线| 精品成人av一区| 国产一区二区视频在线观看| 国产精品色婷婷视频| 国产精品观看在线亚洲人成网| 欧美极品少妇xxxxⅹ喷水| 国产日韩欧美中文在线播放| 国产亚洲精品一区二555| 日韩av电影在线播放| 国产精品com| 欧美精品久久久久久久免费观看| 91精品在线国产| 欧美精品久久久久久久免费观看| 国产精品美女久久久免费| 欧美激情二区三区| 久久久久久久一区二区三区| 91精品在线国产| 77777亚洲午夜久久多人| 亚洲欧美国产日韩中文字幕| 成人性生交大片免费观看嘿嘿视频| 中文字幕自拍vr一区二区三区| 91av在线不卡| 国产精品久久久久久久7电影| 欧美日韩国产成人在线| 国产美女精彩久久| 91在线免费观看网站| 欧美裸体男粗大视频在线观看| 欧美第一黄色网| 综合网中文字幕| 在线看日韩av| 91性高湖久久久久久久久_久久99| 欧美乱妇高清无乱码| 国产一区二区三区欧美| 亚洲国产精品99久久| 亚州av一区二区| 两个人的视频www国产精品| 亚洲综合中文字幕68页| 日韩久久午夜影院| 国产一区视频在线| 中文字幕日韩在线观看| 亚洲精品久久久久中文字幕二区| 精品中文视频在线| 亚洲aⅴ日韩av电影在线观看| 68精品国产免费久久久久久婷婷| 亚洲偷熟乱区亚洲香蕉av| 自拍偷拍免费精品| 日韩欧美亚洲范冰冰与中字|