操作系统生产者消费者问题实验报告Word文件下载.docx

上传人:b****5 文档编号:8557229 上传时间:2023-05-11 格式:DOCX 页数:9 大小:222.80KB
下载 相关 举报
操作系统生产者消费者问题实验报告Word文件下载.docx_第1页
第1页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第2页
第2页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第3页
第3页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第4页
第4页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第5页
第5页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第6页
第6页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第7页
第7页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第8页
第8页 / 共9页
操作系统生产者消费者问题实验报告Word文件下载.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统生产者消费者问题实验报告Word文件下载.docx

《操作系统生产者消费者问题实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《操作系统生产者消费者问题实验报告Word文件下载.docx(9页珍藏版)》请在冰点文库上搜索。

操作系统生产者消费者问题实验报告Word文件下载.docx

1.生产者-消费者问题的多线程解决方案

2.设计一个执行矩阵乘法的多线程程序

三、项目要求与分析

1.请查阅资料,掌握线程创建的相关知识以及矩阵乘法的相关知识,了解java语言程序编写的相关知识

2.理解线程的实验步骤

在本次试验中,以“生产者-消费者”模型为依据,提供了一个多线程的“生产者-消费者”实例,编写java代码调试运行结果,得出相应的结论。

理解矩阵乘法的实验步骤

四、具体实现

1.生产者-消费者实例

(1)创建一个缓冲信息发送接收通道接口,并创建邮箱盒子类实现,主要代码如下:

//通道接口

publicinterfaceChannel

{

publicabstractvoidsend(Objectitem);

publicabstractObjectreceive();

}

//实现接口

publicclassMessageQueueimplementsChannel

privateVectorqueue;

publicMessageQueue()

{

queue=newVector();

}

publicvoidsend(Objectitem)

queue.addElement(item);

publicObjectreceive()

if(queue.size()==0)

returnnull;

else

returnqueue.remove(0);

(2)创建一个工厂多线程类(启动生产者和消费者),并且添加main函数进行测试,主要代码如下:

//工厂类与主方法

publicclassFactory

publicFactory()

ChannelmailBox=newMessageQueue();

ThreadproducerThread=newThread(newProducer(mailBox));

ThreadconsumerThread=newThread(newConsumer(mailBox));

producerThread.start();

consumerThread.start();

publicstaticvoidmain(String[]args)

Factoryserver=newFactory();

(3)创建一个线程睡眠类,用于测试,主要代码如下:

publicclassSleepUtilities

publicstaticvoidnap()

nap(NAP_TIME);

publicstaticvoidnap(intduration)

intsleeptime=(int)(NAP_TIME*Math.random());

try

{Thread.sleep(sleeptime*1000);

catch(InterruptedExceptione){}

privatestaticfinalintNAP_TIME=5;

(4)创建生产者类实现Runnable,主要代码如下:

publicclassProducerimplementsRunnable

privateChannelmbox;

publicProducer(Channelmbox)

this.mbox=mbox;

publicvoidrun()

Datemessage;

while(true)

SleepUtilities.nap();

message=newDate();

System.out.println("

Producerproduced"

+message);

mbox.send(message);

(5)创建消费者类实现Runnable,主要代码如下:

publicclassConsumerimplementsRunnable

publicConsumer(Channelmbox)

message=(Date)mbox.receive();

if(message!

=null)

System.out.println("

Consumerconsumed"

(6)调试程序,运行结果:

2.矩阵乘法实例

(1)初始化矩阵(便于观察,这里使用随机数生成矩阵),主要初始化代码如下

matrix1=newint[m][k];

matrix2=newint[k][n];

matrix3=newint[m][n];

//随机初始化矩阵a,b

fillRandom(matrix1);

fillRandom(matrix2);

staticvoidfillRandom(int[][]x)

{

for(inti=0;

i<

x.length;

i++)

for(intj=0;

j<

x[i].length;

j++)

//每个元素设置为0到99的随机自然数

x[i][j]=(int)(Math.random()*100);

}

(2)打印输出矩阵函数,主要代码如下:

staticvoidprintMatrix(int[][]x)

for(inti=0;

for(intj=0;

System.out.print(x[i][j]+"

"

);

System.out.println("

"

(3)创建多线程类,并实现Runnable接口同步对矩阵进行分行计算,主要代码如下:

//创建线程,数量<

=4

for(inti=0;

4;

if(index<

m)

Threadt=newThread(newMyThread());

t.start();

}else

break;

synchronizedstaticintgetTask()

returnindex++;

return-1;

classMyThreadimplementsRunnable

inttask;

//@Override

MultiThreadMatrix.threadCount++;

while((task=MultiThreadMatrix.getTask())!

=-1)

进程:

+Thread.currentThread().getName()+"

\t开始计算第"

+(task+1)+"

行"

MultiThreadMatrix.n;

MultiThreadMatrix.k;

MultiThreadMatrix.matrix3[task][i]+=MultiThreadMatrix.matrix1[task][j]*MultiThreadMatrix.matrix2[j][i];

MultiThreadMatrix.threadCount--;

(4)通过不断改变矩阵大小,线程数目,,调试程序,运行结果:

五、所遇问题与解决方法

1.在生产者-消费者多线程试验中,刚开始没有考虑到使用线程睡眠,运行结果速度之快,没法观看数据变化,后面定义了睡眠控制,使得问题得以解决

2.在多线程矩阵开发实验中,刚开始定义矩阵太小,测试结果不太明显,后面通过把矩阵改大,并且线程数目不断变化使得结果明显。

六、实验总结

深刻了解了生产者消费者多线程,进一步理解了“生产者-消费者”模型。

同时也掌握了一些java编程语言相关知识。

多线程矩阵实验中,发现矩阵小时,线程越少,运行时间越长;

而矩阵过大时,线程数量与运行时间成反比。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2