-
大小: 194KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-10
- 語言: C#
- 標(biāo)簽:
資源簡介
生產(chǎn)者消費(fèi)者為模型的多線程編程的c#實(shí)現(xiàn),原創(chuàng)包括代碼和程序,算法核心已經(jīng)封裝。可重用。

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Text;
using?System.Threading;
class?Threadobject//具有模擬生產(chǎn)及消費(fèi)功能的一個(gè)類
{
????Int32?id;//用戶id的申明
????Int32?max;//最大等待隊(duì)列長度的申明
????List?list?=?new?List();//為便于控制使臨界資源盡量少采用了framework2.0中新添加的list<>類作為等待隊(duì)列
????public?Threadobject(Int32?x)//構(gòu)造函數(shù)(便于對對象的初始化)
????{
????????this.id?=?0;
????????this.max?=?x;
????????this.list.Clear();
????}
????public?void?customer()//具有模擬生產(chǎn)者功能的方法
????{
????????Console.WriteLine(Thread.CurrentThread.Name?+?“已經(jīng)啟動!“);
????????Console.WriteLine(“_____________________________________________“);//輸出提示叫號機(jī)啟動
????????while?(true)//用while循環(huán)使生產(chǎn)者線程不會推出一直執(zhí)(生產(chǎn))行下去
????????{
????????????Random?producetime?=?new?Random();//隨機(jī)數(shù)聲名
????????????Int32?time;
????????????lock?(list)//鎖住list對象
????????????{
????????????????if?(list.Count?????????????????{
????????????????????Monitor.Enter(this);//監(jiān)視id
????????????????????id?=?id?+?1;//id加一
????????????????????list.Add(id);//將id?add到list中(即一個(gè)id=一個(gè)客戶)
????????????????????Monitor?.Exit?(this);//推出監(jiān)視
????????????????????time?=?producetime.Next(1000?5000);//產(chǎn)生一個(gè)隨機(jī)數(shù)阻塞生產(chǎn)線程相應(yīng)的時(shí)間以模擬生產(chǎn)
????????????????????Thread.Sleep(time);
????????????????????Console.WriteLine(““);
????????????????????Console.WriteLine(Thread.CurrentThread.Name?+?“?已經(jīng)產(chǎn)生?“?+?id?+?“號客戶!用時(shí)“?+?time?+?“毫秒“+“ 隊(duì)列中現(xiàn)有“+list?.Count?+“個(gè)客戶!“);
????????????????????Console.WriteLine(“_____________________________________________“);//生產(chǎn)提示
????????????????}
????????????????else
????????????????{
????????????????????Console.WriteLine(““);
????????????????????Console.WriteLine(“_____________________________________________“);
????????????????????Console.WriteLine(“顧客緩沖曲隊(duì)列已滿! “?+?Thread.CurrentThread.Name?+?“?被阻塞!“);
????????????????????Console.WriteLine(“等待服務(wù)窗口接待客戶!“);
????????????????????Console.WriteLine(“_____________________________________________“);
????????????????????Console.WriteLine(““);//阻塞提示
????????????????????Thread.CurrentThread.Priority?=?ThreadPriority.Lowest;//將當(dāng)前線程的優(yōu)先級設(shè)置為最低以便以往阻塞得線程先得到處理機(jī)
????????????????????Monitor.Wait(list);//線程進(jìn)入阻塞隊(duì)列
????????????????}
????????????????Monitor.Pulse(list);//喚醒阻塞的消費(fèi)者線程
????????????}
????????}
????}
????public?void?server()//具有模擬消費(fèi)者功能的方法
????{
????????Console.WriteLine(Thread.CurrentThread.Name?+?“?已經(jīng)啟動!“);
????????Console.WriteLine(“*********************************************“);//輸出提示服務(wù)窗口啟動
????????while?(true)
????????{
????????????Random?producetime?=?new?Random();//隨機(jī)數(shù)聲名
????????????Int32?timenumber;
????????????lock?(list)//鎖住list對象
????????????{
????????????????if?(list.Count?>?0)//判斷等待服務(wù)隊(duì)列是否為空
????????????????{
????????????????????number=list[0];//便于顯示接受服務(wù)的客戶
????????????????????list.RemoveAt(0);//接受服務(wù)后移出隊(duì)首的等待客戶
????????????????????time?=?producetime.Next(5000?6000);//產(chǎn)生一個(gè)隨機(jī)數(shù)阻塞生產(chǎn)線程相應(yīng)的時(shí)間以模擬生產(chǎn)
????????????????????Thread.Sleep(time);
????????????????????Console.WriteLine(““);
????????????????????Console.WriteLine(Thread.Cur
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件????????922??2007-05-18?18:56??生產(chǎn)——消費(fèi).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個(gè)文件信息
評論
共有 條評論