资源简介
多道程序缓冲区协调操作
如下图1所示,有多个PUT操作要不断循环地向Buffer1送字符数据,有Move1操作不断地将Buffer1的数据取到Buffer2,Move2操作不断地将Buffer1的数据取到Buffer3,有多个GET操作要不断地从Buffer2和Buffer3中取数据。PUT、 MOVE、 GET每次操作一个数据,为了在操作的过程中要保证数据不丢失, 每个Buffer每次只能接受一个PUT或一个Move或一个Get。运用进程同步和互斥机制设计一个多道程序完成上述操作
代码片段和文件信息
package Main;
import UI.MainFace;
import UI.PopBufferCon;
public class Carrier extends Thread{
private int from;
private int to;
private int name;
private object obj;
public Carrier(int from int to int name) {
super();
this.from = from;
this.to = to;
this.name = name;
}
public void run()
{
while(manipulate.run)
{
synchronized(manipulate.buffer1)
{
try {
while(manipulate.buffer1.size() == 0)
{
System.out.println(“Buffer1 is emptyplease wait!“);
manipulate.waitNumber++;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
manipulate.buffer1.wait();
manipulate.waitNumber--;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
}
obj = manipulate.buffer1.remove();
System.out.println(“Move “+obj+“ to“ + to+ “ form “+from);
//从1移出 更新容量显示
manipulate.strBuffer1[manipulate.NoBuffer1++] =(“Move “+obj+“ to“ + to+ “ form “+from);
manipulate.buffer1Con.remove(obj);
//设置弹出窗口的1标签
manipulate.buffer1Contain = manipulate.buffer1Con.toString();
PopBufferCon.B1.setText(manipulate.buffer1Contain);
MainFace.List1.setListData(manipulate.strBuffer1);
Thread.sleep((long)(Math.random()*300*manipulate.speed));
manipulate.buffer1.notify();
}
catch(InterruptedException e)
{
System.out.println(“Move “+name+“ to“ + to+“ is interrupted!“);
}
}
if(to == 2)
{
synchronized(manipulate.buffer2)
{
try {
while(manipulate.buffer2.size() == manipulate.buffer2Capacity)
{
System.out.println(“Buffer2 is fullplease wait“);
manipulate.waitNumber++;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
manipulate.buffer2.wait();
manipulate.waitNumber--;
MainFace.frame.settitle(getString.settitle(manipulate.waitNumber manipulate.buffer1.size() manipulate.buffer2.size() manipulate.buffer3.size()));
}
if(manipulate.buffer2.add(obj))
{
System.out.println(“Move “+obj+“ to 2 from 1“);
//记录buffer2动态显示过程
manipulate.strBuffer2[manipulate.NoBuffer2++] = (“Move “+obj+“ to 2 from 1“);
manipulate.buffer2Con.add(obj); //更新buffer内的数据
manipulate.buffer2Contain = manipulate.buffer2Con.toString();
PopBufferCon.B2.setText(manipulate.buffer2Contain);
MainFace.List2.setListData(manipulate.strBuffer2);
Thread.sleep((long)(Math.random()*300*manipulate.speed));
manipulate.buffer2.notify();
}
}
catch(InterruptedException e)
{
System.out.p
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 396 2018-12-24 08:42 OSProject\.classpath
文件 385 2018-12-24 08:42 OSProject\.project
文件 642 2018-12-24 08:42 OSProject\.settings\org.eclipse.jdt.core.prefs
文件 4049 2018-12-28 10:55 OSProject\bin\Main\Carrier.class
文件 3364 2018-12-28 10:55 OSProject\bin\Main\Consumer.class
文件 1327 2018-12-27 19:13 OSProject\bin\Main\getString.class
文件 2206 2018-12-28 13:27 OSProject\bin\Main\manipulate.class
文件 2773 2018-12-28 09:48 OSProject\bin\Main\Procedure.class
文件 721 2018-12-28 09:37 OSProject\bin\UI\Dialog$1.class
文件 664 2018-12-28 09:37 OSProject\bin\UI\Dialog$2.class
文件 4395 2018-12-28 09:37 OSProject\bin\UI\Dialog.class
文件 3084 2018-12-28 08:22 OSProject\bin\UI\MainFace.class
文件 1732 2018-12-28 09:37 OSProject\bin\UI\MainInterface$1.class
文件 1573 2018-12-28 09:37 OSProject\bin\UI\MainInterface$2.class
文件 617 2018-12-28 09:37 OSProject\bin\UI\MainInterface$3.class
文件 617 2018-12-28 09:37 OSProject\bin\UI\MainInterface$4.class
文件 1106 2018-12-28 09:37 OSProject\bin\UI\MainInterface$5.class
文件 1108 2018-12-28 09:37 OSProject\bin\UI\MainInterface$6.class
文件 4301 2018-12-28 09:37 OSProject\bin\UI\MainInterface.class
文件 1539 2018-12-27 20:56 OSProject\bin\UI\PopBufferCon.class
文件 2468 2018-12-27 12:03 OSProject\hs_err_pid17456.log
文件 43778 2018-12-27 12:03 OSProject\hs_err_pid21864.log
文件 265058 2018-12-27 12:03 OSProject\replay_pid21864.log
文件 4608 2018-12-28 10:55 OSProject\src\Main\Carrier.java
文件 3209 2018-12-28 10:55 OSProject\src\Main\Consumer.java
文件 763 2018-12-27 11:16 OSProject\src\Main\getString.java
文件 1943 2018-12-28 13:27 OSProject\src\Main\manipulate.java
文件 1981 2018-12-28 09:48 OSProject\src\Main\Procedure.java
文件 3956 2018-12-28 09:37 OSProject\src\UI\Dialog.java
文件 3277 2018-12-28 08:22 OSProject\src\UI\MainFace.java
............此处省略13个文件信息
- 上一篇:大地电磁的粒子群法一维反演程序
- 下一篇:光学分辨率检验板
相关资源
- shell简单实现
- 数据结构课设| |迷宫问题
- 东北大学操作系统复习提纲
- 华中科技大学计算机学院操作系统三
- 操作系统实验全部题目+完整代码:
- Windows操作系统安全加固策略
- 操作系统-SSTF磁盘调度算法模拟
- 篮球24秒倒计时
- 操作系统实用教程 第二版 清华大学
- 计算机操作系统实验_动态分区分配方
- 进程状态模拟转换.docx
- 王道操作系统2019百度网盘.txt
- 东北大学软件学院操作系统期末原题
- 操作系统实验报告-动态存储管理
- H5edu前端培训实训报告以及最终总结报
- 操作系统课设.docx
- EDA课程设——计正负脉宽可调信号发
- 操作系统模拟.rar
- 操作系统概念OSC答案.rar
- 汇编语言做的计算器课设论文
- Winio3.0完整版_支持64位操作系统
- 计算机操作系统2009-2015考研真题
- EOS操作系统文件系统功能完善
- 《操作系统》-简答题.DOC
- 北邮操作系统第二次实验报告
- 操作系统实验报告-先来先服务的调度
- 数电课设万年历
- Linux设备驱动
- Linux内存分配与回收
- 请求调页存储管理系统的模拟实现
评论
共有 条评论