哲学家进餐问题描述

由Dijkstra提出并解决哲学家进餐问题(The Dinning Philosophers Problem)是经典的同步问题。该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,在桌子上有五个碗和五只筷子,他们的生活方式是交替的进行思考和进餐。平时,一个哲学家进行思考,饥饿时便试图取用其左右最靠近他的筷子,只有他拿到两只筷子时才能进餐,进餐完毕继续进行思考。

1 利用记录型信号量解决哲学家进餐问题

经过分析可知,圆桌上的筷子是临界资源,在一段时间内只允许一位哲学家使用,为了实现筷子的互斥使用,可以使用一个信号量表示一只筷子,由这五个信号量构成信号量数组。

描述如下:

1 Var chopstick:array[0,...,4] of semapthore;2 所有信号量均被初始化为1,第i位哲学家的活动可描述为:3 repeat4 wait(chopstick[i]); //申请一个临界资源使用权(获取左边的筷子)

5 wait(chopstick[(i+1) mod 5]);//在申请一个临界资源使用权(获取右边的筷子)

6 ...7 eat //资源申请成功后进餐操作

8 ...9 signal(chopstick[i]); //释放一个临界资源(放回走手边筷子)

10 signal(chopstick[(i+1) mod 5]) //再释放一个临界资源(放回右手边筷子)

11 ...12 think13 until false

但这种方式会引起死锁,例如:假如五位哲学家同时饥饿,同时拿起左边的筷子,此时五个信号量chopstick均为0;当他们试图拿起右边的筷子时都将因为没有筷子而进入无限等待。对于这样的死锁问题,可采用以下几种解决办法。

(1) 至多只允许有四位哲学家同时去拿左边的筷子,最终能保证至少有一位哲学家能够 进餐,并在用毕时能释放出他用过的两只筷子,从而使更多的哲学家能够进餐。

(2) 仅当哲学家的左、右两只筷子均可用时,才允许他拿起筷子进餐。

(3) 规定奇数号哲学家先拿他左边的筷子,然后再去拿右边的筷子,而偶数号哲学家则 相反。按此规定,将是 1、2 号哲学家竞争 1 号筷子;3、4 号哲学家竞争 3 号筷子。即五位 哲学家都先竞争奇数号筷子,获得后,再去竞争偶数号筷子,最后总会有一位哲学家能获 得两只筷子而进餐。

2.利用 AND 信号量机制解决哲学家进餐问题

在哲学家进餐问题中,要求每个哲学家先获得两个临界资源(筷子)后方能进餐,这在本 质上就是前面所介绍的 AND 同步问题,故用 AND 信号量机制可获得最简洁的解法。

描述如下

1 Var chopstick array of semapthore:=(1,1,1,1,1);2 processi3 repeat4 think;5 Sswait(chopstick[(i+1) mod 5],chopstick[i]);6 eat7 Ssignal(chopstick[(i+1) mod 5],chopstick[i]);8 until false;

Linux哲学家进餐杀死进程,经典进程的同步问题之——哲学家进餐相关推荐

  1. 【linux】linux一次杀死多个进程

    1.概述 ps杀死 杀死hello进程: ps -ef |grep hello |awk '{print $2}'|xargs kill -9 2.jps杀死多个相同的进程名称 lcc@lcc zoo ...

  2. Linux杀死java项目进程

    我们在开发 Java Web 服务时,如果使用外部 Tomcat Web容器,那么启停服务可以直接使用 Tomcat 自带的脚本.不过现在大多数服务使用 Spring Boot 框架来开发,使用内嵌的 ...

  3. Linux哲学家进餐杀死进程,100分跪求“哲学家就餐问题”在 Linux下运行的源代码(后缀名为.c)!!!...

    如题. | 代码大致如下,当然不能直接使用,我没写P,V操作的函数. # define N 5 /* 哲学家数目 */ # define LEFT (i-1+N)%N /* i的左邻号码 */ # d ...

  4. 【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一.进程状态 二.进程创建 三.进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一.进程状态 Linux 进 ...

  5. Linux OOM 自动杀死进程(转)

    Linux OOM 自动杀死进程 问题描述: 今天上班后,登录一台内网测试服务器,发现部分进程失踪 (Nginx/PHP-FPM/MySQL/Crond). 解决方法: 1.首先启动这些进程,保证正常 ...

  6. linux进程莫名其妙被kill,Linux运行程序时,程序进程莫名退出(被杀死)

    Linux运行程序时,程序进程莫名退出(被杀死) 1.知识点 1)Linux程序进程被杀,日志突然中止,可以考虑是否因为程序占用内存过高,导致系统内存不足,为避免系统崩溃,系统寻找内存占用最大的进程k ...

  7. window 和 linux 环境下杀死tomcat进程——也可以解决其他端口被占用的问题

    window 和 linux 环境下杀死tomcat进程--也可以解决其他端口被占用的问题 参考文章: (1)window 和 linux 环境下杀死tomcat进程--也可以解决其他端口被占用的问题 ...

  8. linux下杀死全部进程,linux下批量杀死进程

    ps aux|grep python|grep -v grep|cut -c 9-15|xargs kill -15 管道符"|"用来隔开两个命令,管道符左边命令的输出会作为管道符 ...

  9. linux强制杀死某个端口进程命令

    程序猿日常 又快过年了! linux强制杀死某个端口进程命令,例如80端口: sudo fuser -k -n tcp 80

  10. linux killall 源代码,Linux基础命令---杀死进程killall

    killall killall可以根据名字来杀死进程,它会给指定名字的所有进程发送信息.如果没有指定信号名,则发送SIGTERM.信号可以通过名称(例如-HUP或-SIGHUP)或数字(例如-1)或选 ...

最新文章

  1. 找不到命令报错bash:command not found解决方案
  2. kafka常用的命令
  3. Python安装模块出错(No module named setuptools)解决方法
  4. php 同步代码,PHP进程同步代码实例
  5. Linux系统学习----前言
  6. 云服务如何搭建数据库_【MySQL8.0.18】阿里云服务器上搭建MySQL数据库
  7. python -- 计算 平方、乘方、平方根_从零开始学习PYTHON3讲义(二)把Python当做计算器...
  8. VS Code调试C代码
  9. 尼姑一般怎么自称_电池又一重大事故!选铅酸,还是锂电?听听电池老师傅怎么说!...
  10. 下载链接|从CAD2004到CAD2022下载安装软件,提升CAD施工图大师一点儿也不难!
  11. Java --人民币(RMB)小写/数字转换大写工具类
  12. 2021年北京高校数学建模校际联赛题目出版社图书印制策略解题论文及程序
  13. x265-1.7版本-common/quant.cpp注释
  14. 万用字元与特殊符号及正则表示字符
  15. 冒泡法排序(从小到大)
  16. u盘iso安装服务器系统怎么安装win7系统安装方法,u盘iso安装系统,小猪教您u盘怎么安装win7系统...
  17. modelsim 安装路径存在空格导致不能正常使用
  18. 2022年网络工程师考试知识点:防火墙技术
  19. PmH(Partition Min-Hash for Partial Duplicate Image Discovery)
  20. m基于RBF神经网络和BP神经网络的信道估计误码率matlab仿真

热门文章

  1. 为什么我严重不建议去培训机构参加SAP培训?
  2. png转ico图标的在线网站
  3. iOS:如何实现在文字上添加拼音
  4. 3分钟微信支付商家注册0.2费率开户方法,0.38~0.6的必看
  5. 相机和镜头选型的关键:像素尺寸与景深
  6. 阿里云默认80端口无法访问
  7. 实验matlab滤波器心得,数字信号处理,实验,Matlab实验FIR滤波器实现
  8. docker安装gamit_Ubuntu下安装gamit
  9. 以寡治众各个击破,超大文件分片上传之构建基于Vue.js3.0+Ant-desgin+Tornado6纯异步IO高效写入服务
  10. jaxl php,php – jaxl无法连接到Prosody