C#線程池簡單樣本

來源:互聯網
上載者:User
C#提供了Mutex與Interlocked這兩個與線程相關的類,都在Threading命名空間下! Mutex中提供了WiteOne,ReleaseMutex 兩個執行個體方法:WiteOne的作用是"阻塞當前線程,提供對該線程的原子操作"也就是說當一個線程遇到WiteOne的時候,如果在WiteOne裡面沒有線程在操作,則此線程進去操作而裡面有線程的時候,所有到此的線程均需要排隊等候裡面的線程執行完畢而控制這樣操作的結束標記就是使用ReleaseMutex 方法!

  就好比WiteOne是一把鎖一樣~而ReleaseMutex 就是一把鑰匙 當10個人都看到這個門的時候,第一個到達門口的人會看到屋子裡沒有人,則他進去,同時會把門鎖上後面的人自然要在門口等候,當此人在屋子裡執行完任務後他會用鑰匙把門開啟! 出去後把鎖交給門口排隊的第二位同志,第二位同志再做同樣的操作 如果第一位同志執行完任務以後不把使用權交給第二個人的話,而直接退出 那麼屋子自然就空了下來,而門還是鎖的~不必擔心~門會自動開啟,只要是前一個人已經不在屋子裡即可~

  然後再來說說這個Interlocked,官方說明是"對一個變數進行原子操作進行遞增或者遞減然後儲存" 原子操作的概念就是,有且只有一個線程在對此變數進行操作~不準其他線程幹預的操作 當對一個變數進行原子操作的時候,此變數就會加鎖,而其他線程是無法訪問的,只能掛起等候此變數解鎖。

 

一個簡單樣本:

 

public class MutexTest
      
{
      private static int poolFlag = 0 ;//標記
      private const int amountThread = 10 ;//線程總量
      private const int maxThread = 3 ;//可執行線程最大數量
      private static Mutex muxConsole = new Mutex() ;
      public static void Main()
      
    {
          for ( int i = 0 ; i < amountThread ; i ++ )
              {
              // 建立指定數量的線程
              // 是線程調用Run方法
              // 啟動線程
              Thread trd = new Thread( new ThreadStart( Run ) ) ;
              trd.Name = "線程" + i ;
              trd.Start() ;
              
        }
          
    }

      public static void Run()
      
    {
          muxConsole.WaitOne(); //阻塞隊列
          Interlocked.Increment(ref poolFlag) ;//標記+1
          if (poolFlag != maxThread) //判斷是否等於上限
            muxConsole.ReleaseMutex(); //如果此線程達不到可執行線程上限,則繼續開通,讓後面的線程進來
          Console.WriteLine( "{0} 正在運行...... ", Thread.CurrentThread.Name ) ;
          Thread.Sleep( 5000 ); //類比執行
          Console.WriteLine( "{0} 已經中止...... ", Thread.CurrentThread.Name ) ;
          //標記-1
          Interlocked.Decrement(ref poolFlag) ;
          
    }
      
}

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.