操作系统生产者消费者问题实验报告
更新时间:2023-12-14 20:26:01 阅读量: 教育文库 文档下载
实验名称:
一、生产者-消费者问题的多线程解决方案 二、设计一个执行矩阵乘法的多线程程序
日期:2015-10-22 班级:13级计科 学号: 姓名:
一、 实验目的
1.掌握线程的同步与互斥
2.掌握生产者消费者的实现问题 3.掌握多线程的编程方法
4.掌握矩阵乘法的基本计算原理以及实现
实验报告二
二、 实验内容
1.生产者-消费者问题的多线程解决方案
2.设计一个执行矩阵乘法的多线程程序
三、 项目要求与分析
1.请查阅资料,掌握线程创建的相关知识以及矩阵乘法的相关知识,了解java语言
程序编写的相关知识 2.理解线程的实验步骤 在本次试验中,以“生产者-消费者”模型为依据,提供了一个多线程的“生产者-消费者”实例,编写java代码调试运行结果,得出相应的结论。 理解矩阵乘法的实验步骤
四、 具体实现
1. 生产者-消费者实例
(1) 创建一个缓冲信息发送接收通道接口,并创建邮箱盒子类实现,主要代码如下:
//通道接口
public interface Channel {
public abstract void send(Object item); public abstract Object receive(); }
//实现接口
public class MessageQueue implements Channel {
private Vector queue; public MessageQueue() {
queue=new Vector(); }
public void send(Object item) {
queue.addElement(item); }
public Object receive() {
if(queue.size()==0) return null; else
return queue.remove(0); } }
(2) 创建一个工厂多线程类(启动生产者和消费者),并且添加main函数进行测试,主
要代码如下:
//工厂类与主方法
public class Factory {
public Factory() {
Channel mailBox=new MessageQueue();
Thread producerThread=new Thread(new Producer(mailBox)); Thread consumerThread=new Thread(new Consumer(mailBox)); producerThread.start(); consumerThread.start(); }
public static void main(String[] args) {
Factory server=new Factory(); } (3) 创建一个线程睡眠类,用于测试,主要代码如下:
public class SleepUtilities {
public static void nap() {
nap(NAP_TIME); }
public static void nap(int duration) {
int sleeptime = (int)(NAP_TIME * Math.random()); try
{ Thread.sleep(sleeptime*1000); } catch (InterruptedException e) {} }
private static final int NAP_TIME = 5; (4) 创建生产者类实现Runnable,主要代码如下:
public class Producer implements Runnable {
private Channel mbox;
public Producer(Channel mbox) {
this.mbox=mbox; }
public void run() {
Date message; while(true) {
SleepUtilities.nap(); message=new Date();
System.out.println(\+message); mbox.send(message); } } }
(5) 创建消费者类实现Runnable,主要代码如下:
public class Consumer implements Runnable {
private Channel mbox;
public Consumer(Channel mbox) {
this.mbox=mbox; }
public void run() {
Date message;
while(true) {
SleepUtilities.nap();
message=(Date)mbox.receive();
if(message!=null)
System.out.println(\+message); } }
} (6) 调试程序,运行结果:
2. 矩阵乘法实例
(1) 初始化矩阵(便于观察,这里使用随机数生成矩阵),主要初始化代码如下
matrix1 = new int[m][k];
matrix2 = new int[k][n]; matrix3 = new int[m][n];
//随机初始化矩阵a,b fillRandom(matrix1);
fillRandom(matrix2);
static void fillRandom(int[][] x)
{
for (int i=0; i for(int j=0; j //每个元素设置为0到99的随机自然数 x[i][j] = (int) (Math.random() * 100); } } } (2) 打印输出矩阵函数,主要代码如下: static void printMatrix(int[][] x) { for (int i=0; i for(int j=0; j System.out.print(x[i][j]+\); } System.out.println(\); } System.out.println(\); } (3) 创建多线程类,并实现Runnable接口同步对矩阵进行分行计算,主要代码如下: //创建线程,数量 <= 4 for(int i=0; i<4; i++) { if(index < m) { Thread t = new Thread(new MyThread()); t.start(); }else { break; } synchronized static int getTask() { if(index < m) { return index++; } return -1; } } class MyThread implements Runnable { int task; //@Override public void run() { MultiThreadMatrix.threadCount++; while( (task = MultiThreadMatrix.getTask()) != -1 ) { System.out.println(\进程: \+Thread.currentThread().getName()+\开始计算第 \+(task+1)+\行\); for(int i=0; i for(int j=0; j MultiThreadMatrix.matrix3[task][i] += MultiThreadMatrix.matrix1[task][j] * MultiThreadMatrix.matrix2[j][i]; } } } MultiThreadMatrix.threadCount--; } (4) 通过不断改变矩阵大小,线程数目,,调试程序,运行结果: 五、 所遇问题与解决方法 1. 在生产者-消费者多线程试验中,刚开始没有考虑到使用线程睡眠,运行结果速度之快, 没法观看数据变化,后面定义了睡眠控制,使得问题得以解决 2. 在多线程矩阵开发实验中,刚开始定义矩阵太小,测试结果不太明显,后面通过把矩阵 改大,并且线程数目不断变化使得结果明显。 六、 实验总结 深刻了解了生产者消费者多线程,进一步理解了“生产者-消费者”模型。同时也 掌握了一些java编程语言相关知识。多线程矩阵实验中,发现矩阵小时,线程越少,运行时间越长;而矩阵过大时,线程数量与运行时间成反比。
正在阅读:
操作系统生产者消费者问题实验报告12-14
电视节目策划分析_以_康熙来了_为例05-22
可长时粘贴便利贴的制作技术04-09
北京市海淀区2019-2020学年九年级上学期期末英语试题(解析版)05-05
新调入教师代表的大会发言稿优秀6篇03-26
CAI课件设计03-23
食堂人防暖通设计计算书10-11
江苏省射阳县第二中学2018届高三(A)英语作业(28)10-12
《玩法变了》的读后感10篇12-12
50430讲课内容 - 图文10-21
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 生产者
- 操作系统
- 消费者
- 实验
- 报告
- 问题
- 北京福建企业总商会会员单位
- 新北师大版一年级数学上册教材分析报告
- (1)投标邀请函
- 用友财务考试
- 小升初奥数第19节:鸡兔同笼
- 《产品设计改良性产品设计》实验教学大纲()
- 国内外航空服务质量比较毕业论文
- 使用ping命令自测网络故障
- 国贸专业毕业论文选题参考
- 从个人领导力到组织领导力—百年基业GDALTM行动学习七步法(百年基业中国行动学习领航者)
- 国际经济学习题与答案2 2011.1.8
- COMPASS使用手册,兰德马克说明书
- 教师与学生个人空间建设指南
- 高级英语课文译文(上,下册)(自考)
- 分析新课程背景下数学教学的几个“转变”
- 商业地产基础资料
- 2012届推荐本科生免试攻读研究生公示名
- 六年级上学期小学语文考点复习测试期末真题模拟试卷(16套试卷)部编版
- 拖拉机甩油盘设计说明书(全套CAD图纸见最后)
- 应用文通知练习题