C#線程並發執行的實例[轉]


實現思路:線程執行后進行阻塞,判斷當前標記是否達到設置的並發數,如果未達到上限,執行隊列中將繼續增加線程;如已達到其余線程排隊等候。
實例代碼:

注:其中用到Mutex與Interlocked兩個與線程相關的類,需要加上 using System.Threading; 引用Threading命名空間。

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} 正在運行......\n", Thread.CurrentThread.Name);
             Thread.Sleep(3000);   //模擬執行,暫停3秒鍾
             Console.WriteLine("{0} 已經中止......\n", Thread.CurrentThread.Name);
             Interlocked.Decrement(ref poolFlag);  //標記-1
             try
             {
                 muxConsole.ReleaseMutex(); //釋放阻塞
             }
             catch { }
         }
     }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM