資源簡介
生產者消費者為模型的多線程編程的c#實現,原創包括代碼和程序,算法核心已經封裝。可重用。

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Threading;
class?Threadobject//具有模擬生產及消費功能的一個類
{
????Int32?id;//用戶id的申明
????Int32?max;//最大等待隊列長度的申明
????List?list?=?new?List();//為便于控制使臨界資源盡量少采用了framework2.0中新添加的list<>類作為等待隊列
????public?Threadobject(Int32?x)//構造函數(便于對對象的初始化)
????{
????????this.id?=?0;
????????this.max?=?x;
????????this.list.Clear();
????}
????public?void?customer()//具有模擬生產者功能的方法
????{
????????Console.WriteLine(Thread.CurrentThread.Name?+?“已經啟動!“);
????????Console.WriteLine(“_____________________________________________“);//輸出提示叫號機啟動
????????while?(true)//用while循環使生產者線程不會推出一直執(生產)行下去
????????{
????????????Random?producetime?=?new?Random();//隨機數聲名
????????????Int32?time;
????????????lock?(list)//鎖住list對象
????????????{
????????????????if?(list.Count?????????????????{
????????????????????Monitor.Enter(this);//監視id
????????????????????id?=?id?+?1;//id加一
????????????????????list.Add(id);//將id?add到list中(即一個id=一個客戶)
????????????????????Monitor?.Exit?(this);//推出監視
????????????????????time?=?producetime.Next(1000?5000);//產生一個隨機數阻塞生產線程相應的時間以模擬生產
????????????????????Thread.Sleep(time);
????????????????????Console.WriteLine(““);
????????????????????Console.WriteLine(Thread.CurrentThread.Name?+?“?已經產生?“?+?id?+?“號客戶!用時“?+?time?+?“毫秒“+“ 隊列中現有“+list?.Count?+“個客戶!“);
????????????????????Console.WriteLine(“_____________________________________________“);//生產提示
????????????????}
????????????????else
????????????????{
????????????????????Console.WriteLine(““);
????????????????????Console.WriteLine(“_____________________________________________“);
????????????????????Console.WriteLine(“顧客緩沖曲隊列已滿! “?+?Thread.CurrentThread.Name?+?“?被阻塞!“);
????????????????????Console.WriteLine(“等待服務窗口接待客戶!“);
????????????????????Console.WriteLine(“_____________________________________________“);
????????????????????Console.WriteLine(““);//阻塞提示
????????????????????Thread.CurrentThread.Priority?=?ThreadPriority.Lowest;//將當前線程的優先級設置為最低以便以往阻塞得線程先得到處理機
????????????????????Monitor.Wait(list);//線程進入阻塞隊列
????????????????}
????????????????Monitor.Pulse(list);//喚醒阻塞的消費者線程
????????????}
????????}
????}
????public?void?server()//具有模擬消費者功能的方法
????{
????????Console.WriteLine(Thread.CurrentThread.Name?+?“?已經啟動!“);
????????Console.WriteLine(“*********************************************“);//輸出提示服務窗口啟動
????????while?(true)
????????{
????????????Random?producetime?=?new?Random();//隨機數聲名
????????????Int32?timenumber;
????????????lock?(list)//鎖住list對象
????????????{
????????????????if?(list.Count?>?0)//判斷等待服務隊列是否為空
????????????????{
????????????????????number=list[0];//便于顯示接受服務的客戶
????????????????????list.RemoveAt(0);//接受服務后移出隊首的等待客戶
????????????????????time?=?producetime.Next(5000?6000);//產生一個隨機數阻塞生產線程相應的時間以模擬生產
????????????????????Thread.Sleep(time);
????????????????????Console.WriteLine(““);
????????????????????Console.WriteLine(Thread.Cur
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????922??2007-05-18?18:56??生產——消費.sln
?????文件???????1525??2007-10-21?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.application
?????文件??????20480??2007-10-21?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.exe
?????文件???????2185??2007-10-21?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.exe.manifest
?????文件??????15872??2007-10-21?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.pdb
?????文件???????5266??2007-05-19?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.publish\ConsoleApplication1.application
?????文件??????20480??2007-05-19?13:18??ConsoleApplication1\bin\Debug\ConsoleApplication1.publish\ConsoleApplication1_1_0_0_2\ConsoleApplication1.exe.deploy
?????文件???????5862??2007-05-19?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.publish\ConsoleApplication1_1_0_0_2\ConsoleApplication1.exe.manifest
?????文件?????423872??2007-05-19?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.publish\setup.exe
?????文件???????1525??2007-10-21?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.application
?????文件???????5632??2005-12-08?14:51??ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.exe
?????文件???????2185??2007-10-21?13:37??ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.exe.manifest
?????文件???????3216??2007-05-18?19:10??ConsoleApplication1\cus-ser.csproj
?????文件????????536??2007-05-19?13:38??ConsoleApplication1\cus-ser.csproj.user
?????文件???????1676??2007-05-18?19:04??ConsoleApplication1\cus-ser_TemporaryKey.pfx
?????文件????????182??2007-05-18?18:56??ConsoleApplication1\obj\ConsoleApplication1.csproj.FileList.txt
?????文件????????356??2008-03-04?19:43??ConsoleApplication1\obj\cus-ser.csproj.FileList.txt
?????文件???????1525??2007-10-21?13:37??ConsoleApplication1\obj\Debug\ConsoleApplication1.application
?????文件??????20480??2007-10-21?13:37??ConsoleApplication1\obj\Debug\ConsoleApplication1.exe
?????文件???????2185??2007-10-21?13:37??ConsoleApplication1\obj\Debug\ConsoleApplication1.exe.manifest
?????文件??????15872??2007-10-21?13:37??ConsoleApplication1\obj\Debug\ConsoleApplication1.pdb
?????文件???????6483??2007-09-08?11:24??ConsoleApplication1\Program.cs
?????文件???????1185??2007-05-18?14:04??ConsoleApplication1\Properties\AssemblyInfo.cs
?????目錄??????????0??2010-06-19?18:10??ConsoleApplication1\bin\Debug\ConsoleApplication1.publish\ConsoleApplication1_1_0_0_2
?????目錄??????????0??2010-06-19?18:10??ConsoleApplication1\bin\Debug\ConsoleApplication1.publish
?????目錄??????????0??2009-10-07?17:57??ConsoleApplication1\obj\Debug\TempPE
?????目錄??????????0??2010-06-19?18:10??ConsoleApplication1\bin\Debug
?????目錄??????????0??2010-06-19?18:10??ConsoleApplication1\obj\Debug
?????目錄??????????0??2010-06-19?18:10??ConsoleApplication1\bin
?????目錄??????????0??2010-06-19?18:10??ConsoleApplication1\obj
............此處省略5個文件信息
- 上一篇:模擬進程調度C#版基于時間片的輪轉調度
- 下一篇:基于C#的多線程的網頁抓取
評論
共有 條評論