学习
实践
活动
专区
工具
TVP
写文章

6.哲学家就餐问题

哲学家就餐问题 有五个哲学家,他们的生活方式是交替的进行思考和进餐。哲学家们公用一张圆桌,分别坐在周围的五张椅子上。在圆桌上有5个碗和5支筷子。 var chopstick:array[0……4] of semaphor 所有信号量被初始化为1 用记录型信号量解决哲学家进餐问题 第i个哲学家的活动可买描述为 repeat wait(chopstick think; until false; 问题 假如5个哲学家同时饥饿而各自拿起左边的筷子,会使5个信号量均为0;当他们再试图拿起右边筷子时,都将无限期的等待。 仅当哲学家的左右两支筷子均可使用时,才允许他拿起筷子进餐。 规定奇数号哲学家先拿起其左边的筷子,再拿左边的,偶数号哲学家则相反。 用AND型信号量解决哲学家进餐问题 var chopstick: array[0...4] of semaphore := (1,1,1,1,1) 具体过程: repeat think; Swait

82410

哲学家进餐问题的模拟【操作系统】

哲学家就餐问题是描述死锁的经典例子。为了防止死锁,可以采用资源预分配法或者资源按序分配法。 二、设计内容 哲学家进餐问题的模拟。 三、开发环境 windows环境,Myeclipse平台。 四、分析设计 【1】实验原理 哲学家进餐问题描述的是五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五只碗和五只筷子。他们的生活方式是交替地进行思考和进餐。 对于死锁问题可采取这样的几种解决方法: (1)至多只允许四个哲学家同时进餐,以保证至少有一个哲学家可以进餐,最终总会释放出他所用过的两只筷子,从而可使更多的哲学家进餐; (2)仅当左右两只筷子均可用时, 实习中还有对LINUX操作系统内核代码的分析,使我们具体的认识了LINUX,了解其设计思想和功能模块,而在LINUX下的各种常用命令也要求我们熟练掌握。

7630
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    漫谈并发和并行:死磕哲学家进餐问题

    我们这里就死磕一下其中的死锁问题哲学家进餐问题 哲学家进餐问题是描述死锁最经典的问题,我们后续整个文章都会以此为出发点来讨论,现在先列出来哲学家进餐的问题描述。 问题场景是五个哲学家围绕一个圆桌就做,桌上摆着五只(不是五双)筷子。哲学家的状态可能是“思考”或者“饥饿”。如果饥饿,哲学家就将拿起他两边的筷子并就餐一段时间。就餐结束,哲学家就会放回筷子。 文章组织 本文主要是讲哲学家进餐问题,因此有必要先回顾一些锁的知识,然后会通过四个版本的程序来解决哲学家进餐问题,最后一个简单的总结。 在这里先说明四个版本的程序有什么区别: 经典的内置锁解决方案。 Philosopher Thread[Thread-1,5,main] has thought 24410 times 0x04 版本3:ReentrantLock+超时取消 前面我们实现了两个版本的哲学家进餐问题 改进 根据前面原子变量的说明,我们有了哲学家进餐问题的新解法!!! 我们对代码进行了一些调整。取掉了Chopstick类,并对Philosopher做了较大的改动。

    1.3K40

    线程例题,哲学家用餐

    例题,哲学家用餐: 在一张餐桌上坐着五个哲学家,但是却只有五根筷子,每个哲学家只有一根筷子,所以当一个哲学家要夹菜的时候需要用他旁边那个哲学家的筷子,被拿走筷子的哲学家则只能等待那个哲学家吃完放下筷子他才能夹菜 设计思路: 首先编写一个筷子类,每根筷子都是一个对象,这个类里有拿起、放下两个方法;当一个哲学家线程来调用拿起方法时,下一个哲学家线程就要进入等待状态,然后这个哲学家线程调用放下方法后,就激活那个等待中的哲学家线程 接着设计哲学家类,这个类继承Thread类,每个哲学家都是一个线程对象。 这类有三个属性,用于存放构造器的参数,这个类的构造器要求传递三个参数,分别是哲学家的名字(name)、右边的筷子(right)、左边的筷子(left)。 然后构建五个哲学家对象,分别传递相应的参数。接着将哲学家对象使用start方法启动。 代码示例: ? 运行结果: ?

    21440

    linux网络编程之System V 信号量(二):用信号量实现进程互斥示例和解决哲学家就餐问题

    short  *array;  /* Array for GETALL, SETALL */     struct seminfo  *__buf;  /* Buffer for IPC_INFO (Linux-specific 输出如下: simba@ubuntu:~/Documents/code/linux_programming/UNP/system_v$ . 二、哲学家就餐问题的描述可以参考这里,下面我们尝试解决这个问题的方法是:仅当一个哲学家两边筷子都可用时才允许他拿筷子。 ? 上图中红色数字表示哲学家的编号,总共5个哲学家,用5个进程来表示;黑色数字表示筷子的编号,总共有5根筷子,可以定义一个信号量集中含有5个信号量,每个信号量的初始值为1,当某个哲学家可以同时得到两根筷子( 如果发现程序没有运行卡着,即没有发生死锁现象,从中也可以发现同时最多只能有两个哲学家一起用餐,也不会出现相邻哲学家一起用餐的情况。 参考: 《UNP》

    70800

    Linux问题汇总

    ^M: bad interpreter: No such file or directory 经过查阅资料才知道,这是文件格式导致的问题:使用vi/vim进入该shell文件,按下:进入末行模式,输入 判断网络是否连通 有个通用命令,Windows和Linux都能使用,如下: ssh ip -v -p port -v表示调试模式,会打印出具体日志。-p表示端口号。 的时区 查看当前时区 date -R 修改设置Linux服务器时区 // Linux通用 tzselect // 仅限于RedHat Linux 和 CentOS timeconfig // 适用于 Debian dpkg-reconfigure tzdata 复制相应的时区文件,替换系统时区文件;或者创建链接文件 // Linux通用 tzselect // 仅限于RedHat Linux 和 系统查看当前时间的命令 linux下vi操作Found a swap file by the name 非正常关闭vi编辑器时会生成一个.swp文件

    13220

    linux常见问题_linux安装方式

    ps:有点像是在推广linux。 初步估计,可能是系统没有适合Geforce4 TI 4200的驱动程序,或是自带的驱动程序有问题(PS:安装的时候是用图形安装的,而且完全正常,真是郁闷)。 2、再切换到存放驱动文件的文件夹下面,我是放在linux下面,注意linux系统是对大小敏感的,所以文件名的大小写要对应,不然会提示出错的。 以上就出现的问题及安装显卡驱动的过程。 后来在网上查了一下,这个问题还是比较普遍的,有的说是显卡驱动的问题(我也是这么认为的),有的说是屏幕分辨率设置的问题,解决的方向也各有各不同。 因此,我在这发贴,对这个问题,给出一个比较简单的解决方案,直接装最新的显卡驱动。

    15230

    Linux环境配置问题小记

    一、背景 前段时间小编做了一个关于输入法按键响应时间的评测,但已有的评测脚本在windows环境下不兼容,于是小编就搭建一个linux环境,但是在配置测试环境上也遇到许多问题,在此和大家分享记录一下 : 二、问题及解决方案 Centos 7 系统配置问题 1.使用yum包管理工具安装软件时,提示无法连接到网络、无法连接到某主机host 解决办法: (1)在系统文件/etc/resolv.conf 解决办法: 修改/root/.bashrc文件,将其中的alias ll=’ls -alF’ 修改为alias ll=’ls -l’,重新打开窗口即可生效 6.Windows下编写的shell脚本在linux 下无法执行 解决办法: 方法1:在windows下将shell脚本修改成linux格式文件 方法2:在linux系统下使用命令dos2unix + 文件即可修改格式 如果无该命令,则使用sudo 本文旨在分享一些常见的环境配置的问题,让环境配置变得简单点,欢迎大家一起来补充总结! 更多测试知识敬请关注:

    46510

    扫码关注腾讯云开发者

    领取腾讯云代金券