• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    探究Visual Studio 2010中Parallel的使用(4)

    發布: 2010-3-25 11:27 | 作者: 不詳 | 來源: 領測軟件測試網采編 | 查看: 71次 | 進入軟件測試論壇討論

    領測軟件測試網

      探究Visual Studio 2010中Parallel的使用(4)   軟件測試

      更復雜的任務之間的同步

      我們在使用Barrier進行并行任務之間的同步時,有這樣一個缺陷,我們需要預先知道所有需要同步的并行任務的數目,如果這個數目是隨機的,就無法使用Barrier進行任務之間的同步了。并行任務數目不定這種情況很常見。我們還是來看上文中看電影的例子,每場進電影院看電影的觀眾數目是不固定的,那么退場的觀眾也是不固定的,甚至還有中途退場的。當所有觀眾都退場后,我們需要打掃電影院的衛生。這里需要的同步的就是所有觀眾都退場。針對這種數目不定的多個并行任務,.NET Framework提供了CountdownEvent這個類來進行任務之間的同步。

      就像它的名字一樣,CountdownEvent基于這樣一個簡單的規則:當有新的需要同步的任務產生時,就調用AddCount增加它的計數,當有任務到達同步點是,就調用Signal函數減小它的計數,當CountdownEvent的計數為零時,就表示所有需要同步的任務已經完成,可以開始下一步任務了。下面我們利用CountdownEvent來模擬一下觀眾進場立場的情景。

      using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace CountdownEventDemo { // 觀眾類,用來表示一位觀眾 class Customer { public Customer(int nID) { m_nID = nID; } // 觀眾的ID public int m_nID; } class Program { static void Main(string[] args) { // 創建CountdownEvent同步對象 using (var countdown = new CountdownEvent(1)) { // 產生一個隨機數,表示觀眾的數目 Random countRandom = new Random(DateTime.Now.Millisecond); int nCount = countRandom.Next(10); // 構造每一位觀眾看電影的任務 Action[] seeafilm = new Action[ nCount ]; for (int i = 0; i < nCount; i++) { // 構造Customer對象,表示觀眾 Customer currentCustomer = new Customer( i+1 ); seeafilm[i] = () => { // 觀眾進場 countdown.AddCount(); Console.WriteLine("觀眾 {0} 進場。", currentCustomer.m_nID); // 模擬看電影的時間 Thread.Sleep(countRandom.Next(3000,6000)); // 觀眾退場 countdown.Signal(); Console.WriteLine("觀眾 {0} 退場。", currentCustomer.m_nID); }; } //并行執行任務 Parallel.Invoke( seeafilm ); // 在此同步,最后CountdownEvent的計數變為零 countdown.Signal(); countdown.Wait(); } Console.WriteLine("所有觀眾退場,開始打掃衛生。"); Console.ReadKey(); }

      在這段代碼中,我們使用CountdownEvent進行隨機個數任務之間的同步。最后,我們可以得到這樣的輸出。

    圖3 使用CountdownEvent進行同步

      圖3 使用CountdownEvent進行同步

      通過Parallel.Invoke函數,我們可以輕松地將相互獨立的任務并行執行,同時通過Barrier和CountdownEvent類進行任務之間的同步。這種并行計算的開發方式,比以前那種基于線程的并行計算開發方式簡便很多,解放了程序員的腦袋,讓他們可以把更多的腦力放到業務邏輯問題的解決之上。使用Parallel類,多快好省地開發并行計算應用程序。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: Parallel studio Studio visual Visual 探究


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>