:本文记录 WHUT-计算机学院-操作系统 课程 实验2:进程管理

 >>点击查看武汉理工大学计算机专业课程资料汇总

纸上得来终觉浅,觉知此事需躬行!

1、实验内容:

实验预备:掌握进程管理的相关内容,对进程的同步和互斥,及信号量机制有深入的理解

实验内容:模拟实现用信号量机制解决哲学家就餐问题  (或其他经典的同步问题)

具体要求:

  • 任选一种计算机高级语言编程实现
  • 实现5个哲学家(5只筷子)的顺利就餐
  • 需避免出现死锁
  • 使用信号量、及信号量的等待队列
  • 使用P操作、V操作
  • 能够显示每个哲学家、及每只筷子的状态 

2、运行截图:

3、源代码:

package test2;/*每个哲学家安排一个线程*/
class Philosopher extends Thread{private String name;private Chopsticks Chopsticks;public Philosopher(String name,Chopsticks Chopsticks){super(name);this.name=name;this.Chopsticks=Chopsticks;}//重构public void run(){while(true){//哲学家的状态就是:思考→进餐→思考  循环thinking();Chopsticks.P();eating();Chopsticks.V();}}public void eating(){int i = Integer.parseInt(name);System.out.println("哲学家 " + name + "号 开始拿着筷子 "+ i +" 和 "+ (i+1)%5 + "进餐!");//打印哲学家状态和筷子状态try {sleep(2000);//假设吃饭时间为5秒钟} catch (InterruptedException e) {e.printStackTrace();}}public void thinking(){System.out.println("哲学家 " + name + "号 陷入了思考!");try {sleep(2000);//假设思考4秒钟} catch (InterruptedException e) {e.printStackTrace();}}
}class Chopsticks{/*5只筷子,初始为1,即未被用*/private int[] ChopStatus={1,1,1,1,1};//避免死锁/*P操作:只有当左右手的筷子都未被使用时,才允许获取筷子,且必须同时获取左右手筷子*/public synchronized void P(){//获得当前线程的名字(哲学家)String name = Thread.currentThread().getName();int i = Integer.parseInt(name);//当当前线程哲学家左右手的筷子已经被占用while(ChopStatus[i]==0||ChopStatus[(i+1)%5]==0){try {System.out.println("哲学家 "+ name +"号 正在等待筷子!");//当前哲学家线程进入等待状态         wait();  } catch (InterruptedException e) {e.printStackTrace();}}//获得左右筷子,修改筷子状态ChopStatus[i]-=1 ;ChopStatus[(i+1)%5]-=1;}/*V操作:同时释放左右手的筷子*/public synchronized void V(){//获得当前线程的名字(哲学家)String name = Thread.currentThread().getName();int i = Integer.parseInt(name);//释放左右筷子ChopStatus[i]+=1;ChopStatus[(i+1)%5]+=1;//唤醒等待序列中的线程notifyAll();}
}public class Think_Eat {public static void main(String []args){Chopsticks Chopsticks = new Chopsticks();new Philosopher("0",Chopsticks).start();new Philosopher("1",Chopsticks).start();new Philosopher("2",Chopsticks).start();new Philosopher("3",Chopsticks).start();new Philosopher("4",Chopsticks).start();}
}

【操作系统】实验2:进程管理相关推荐

  1. 操作系统实验二 进程管理

    进程管理 一.实验目的 1. 理解进程的概念,明确进程和程序的区别. 2. 理解并发执行的实质. 3. 掌握进程的创建.睡眠.撤销等进程控制方法. 二.实验内容与基本要求 用C语言编写程序,模拟实现创 ...

  2. 操作系统——实验二 进程管理

    1.实验目的 (1)加深对进程概念的理解,明确进程和程序的区别. (2)进一步认识并发执行的实质. (3)分析进程竞争资源现象,学习解决进程互斥的方法. 2.实验预备内容 (1)阅读Linux的sch ...

  3. 计算机操作系统实验二 进程管理

    一.实验目的 1.掌握进程的概念,明确进程的含义 2.认识并了解并发执行的实质 二.实验内容 1.编写一段程序,使用系统调用fork( )创建两个子进程.当此程序运行时,在系统中有一个父进程和两个子进 ...

  4. 操作系统 实验一 进程管理与进程同步

    理解安全性算法和银行家算法的核心机制: 针对3类资源.5个进程的情况,设计相应的数据结构,分别表示每个进程占用各类资源的情况: 编程实现安全性算法函数,编制主函数,动态输入资源的占用情况,进程的资源申 ...

  5. 操作系统实验一 Linux基本操作|实验二 进程管理

    由于当时没存代码,只有实验文档代码截图,文末也可直接获取实验文档. 操作系统实验 目录 实验一 Linux基本操作 实验二进程管理 实验一 Linux基本操作 1实验目的 1.熟悉在Linux操作系统 ...

  6. linux进程管理命令实验,实验2Linux进程管理.doc

    实验2Linux进程管理 实验2 Linux进程管理 实验目的 1.加深对进程概念的理解,明确进程和程序的区别 2.进一步认识并发执行的实质 3.分析进程争用资源的现象,学习解决进程互斥的方法 实验性 ...

  7. (王道408考研操作系统)第二章进程管理-第三节10:经典同步问题之哲学家进餐问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 (王道408 ...

  8. (王道408考研操作系统)第二章进程管理-第三节8:经典同步问题之吸烟者问题

    本文接: (王道408考研操作系统)第二章进程管理-第三节6:经典同步问题之生产者与消费者问题 ((王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题 文章目录 一 ...

  9. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题

    注意:生产者与消费者问题Linux系统编程专栏有案例讲解 Linux系统编程39:多线程之基于阻塞队列生产者与消费者模型 Linux系统编程40:多线程之基于环形队列的生产者与消费者模型 本文接:(王 ...

  10. 笔记篇:操作系统第二章 进程管理

    笔记篇:操作系统第二章 进程管理 目录 笔记篇:操作系统第二章 进程管理 2.1 进程的基本概念 2.1.1 程序的顺序执行及其特征 2.1.2 前驱图 2.1.3 程序的并发执行及其特征 2.1.4 ...

最新文章

  1. Python使用shape计算矩阵的行和列
  2. excel 复制数据 sql server 粘贴_win32 实现 excel 快速复制粘贴
  3. 不能比较或排序text、ntext和image数据类型,除非使用IS NULL 或 LIKE 运算符。
  4. php 文件上传$_FILES中error返回值详解
  5. TortoiseSVN 使用详细步骤(三):安装
  6. 大众点评运维架构图文详解
  7. ryuyan 方差分析_R语言之方差分析篇
  8. love2d环境搭配
  9. 现控计控中基于留数法Z变换与Z反变换的MATLAB实现
  10. 那些年踩过的坑-之《Android Q-高通平台UAC(USB Audio Class)调试记录》
  11. 研发人员技术定级的一些思考
  12. 图像的对比度、亮度、色彩饱和度调节以及灰度化
  13. 《IT老外在中国》第22期:“中国餐桌”上的法式创新
  14. 西南科技大学计算机考研好考吗,西南科技大学考研难吗?一般要什么水平才可以进入?...
  15. 如何利用RFM分析模型进行数据分析?
  16. 零基础教你Unity制作像素鸟游戏 【文末源码】
  17. 机房动力环境监控系统
  18. 狗都能看懂的变化检测网络Siam-NestedUNet讲解——解决工业检测的痛点
  19. 数据结构学习笔记之快速排序(非递归)
  20. 服务器上显示存储脱机,使存储空间直通服务器脱机以进行维护

热门文章

  1. Docker安装Graylog
  2. 搞清楚字符编码08-万国码[4](utf-8)
  3. python实现二叉树的俯视图
  4. 教你如何设置微信“拍一拍”用表情包自动回复
  5. ubuntu jsoncpp 1.9.5 编译使用
  6. 名人故事之 Jon S. von Tetzchner
  7. 缺少计算机所需的介质驱动程序w10,安装Win10系统提示“缺少电脑需要的媒体驱动”怎么办?...
  8. 施乐 著名的帕洛阿尔托研究中心
  9. Python编程从入门到实践课后答案:第七章
  10. Java响应式编程框架