哲学家进餐问题-第三十二天

目录

问题描述

解决问题

结论


问题描述

解决问题

1、 关系分析:找出题目中描述的各个进程,分析它们之间的同步、互斥关系

系统中有5个哲学家进程,5位哲学家与左右邻居对其中间筷子的访问是互斥关系

2、整理思路:根据各进程的操作流程确定P、V操作的大致顺序

只有互斥关系:与之前不同的是,每个哲学家进程需要同时持有两个临界资源才能开始吃饭

如何避免临界资源分配不当造成的死锁现象,是哲学家问题的精髓

3、 设置信号量:设置需要的信号量,并根据题目要求确定信号量初值(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值时多少)

semaphore chopstick[5] ={1,1,1,1,1};   //用于实现5个筷子的互斥访问

 并对哲学家按0~4编号,哲学家i左边的筷子编号为i,右边筷子的编号为(i+1)%5

4、代码实现 

初阶

问题:如果五个哲学家进程并发执行,均拿起了自己左手边的筷子,而每位哲学家循环等待右边的人放下筷子(阻塞),这样就会导致死锁问题的出现

进阶: 

?如何防止死锁的发生?

  • 方法一:可以对哲学家进程施加一些限制条件(互斥信号量),比如最多允许四个哲学家同时进餐。这样就可以保证至少有一个哲学家时可以拿到左右两只筷子的 

对于这段代码可以思考三种情况:

  1. 0号哲学家拿起左筷子后进程切换,2哲学家阻塞等待0号哲学家拿起右裤子并执行B操作后,才能去拿自己的左右筷子(一个哲学家左右两边筷子可以使用时该哲学家是可以一气呵成的去拿自己的筷子的)
  2. 0号哲学家拿起左右筷子开始吃饭时进程切换,1号哲学家在P操作时不会被阻塞,但是在尝试拿自己的左筷子时会被阻塞,进程切换为2号哲学家则会被直接阻塞在P操作(即使一个科学家左右两边的筷子都没有被占用也可能使用不能这两双筷子)
  3. 0号哲学家拿起左右筷子开始吃饭时进程切换,4号哲学家在P操作以及拿自己的左筷子时不会被阻塞,但是在拿起自己的右筷子时因为0号哲学家占用了该筷子所以4号哲学家在拿自己的右筷子时会被阻塞

结论:各哲学家拿筷子这件事必须互斥的执行,这保证了即使一个哲学家在拿筷子拿到一半时被阻塞,也不会有别的哲学家会继续尝试那筷子,这样的话,当前正在吃饭的哲学家放下筷子后,被阻塞的哲学家就可以获得等待的筷子了

  • 方法二:奇数号哲学家先拿左边的筷子,然后再拿右边的筷子,而偶数号哲学家刚好相反。用这种方法可以保证如果相邻的两个奇偶号哲学家都想吃饭,那么只会有其中一个可以拿起第一只筷子,另一个会直接阻塞,这就避免了占用一支后再等待另一只的情况

结论

        哲学家进餐问题的关键在于解决进程死锁(这些进程之间只存在互斥关系,但是与之前解除的互斥关系不同的是,每个进程都需要同时持有两个临界资源,因此就会有”死锁“问题的隐患)

~over~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/286796.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu terminator 非常好用的护眼配置

安装 sudo apt install terminator 配置文件:sudo gedit ~/.config/terminator/config (如果没有就创建) 配置如下: [global_config] handle_size -3 title_transmit_fg_color "#000000" title_trans…

KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复

不少小伙伴,求助电脑报错“KBDNO1.DLL文件缺失,软件或游戏无法启动或运行”,应该怎么办? 首先,我们先来了解“KBDNO1.DLL文件”是什么? KBDNO1.DLL是Windows操作系统中的一个动态链接库文件,主…

Java基础进阶(学习笔记)

注:本篇的代码和PPT图片来源于黑马程序员,本篇仅为学习笔记 static static 是静态的意思,可以修饰成员变量,也可以修饰成员方法 修饰成员的特点: 被其修饰的成员, 被该类的所有对象所共享 多了一种调用方式, 可以通过…

MACOS Atrust服务异常

MAC版Atrust服务异常 点击进入办公后出现提示其一: 核心服务未启动,部分功能存在异常,确定重新启动吗? 可能的原因: 1.上次已完全退出客户端 2.核心服务被其他程序优化禁用 点击重新启动后,出现提示&#x…

Spring Boot 如何使用 Maven 实现多环境配置管理

Spring Boot 如何使用 Maven 实现多环境配置管理 实现多环境配置有以下几个重要原因: 适应不同的部署环境:在实际部署应用程序时,通常会有多个不同的部署环境,如开发环境、测试环境、生产环境等。每个环境可能需要不同的配置&…

虹科方案丨从困境到突破:TigoLeap方案引领数据采集与优化变革

来源:虹科工业智能互联 虹科方案丨从困境到突破:TigoLeap方案引领数据采集与优化变革 原文链接:https://mp.weixin.qq.com/s/H3pd5G8coBvyTwASNS_CFA 欢迎关注虹科,为您提供最新资讯! 导读 在数字化工厂和智能制造时…

【新手小白的xsslab靶场学习】

第1关 最开始页面源代码 直接输入<script>alert(1)</script> 第2关 页面源代码 先尝试<script>alert(1)</script>看页面源代码 <h2>里面尖括号被编码&#xff0c;<input>里面没有编码,直接双引号闭合&#xff0c; 修改payload&…

Python 数据库(一):使用 mysql-connector-python 操作 MySQL 数据库

大家好&#xff0c;我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时&#xff0c;mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能&#xff0c;使您能够执行各种数据库操作&#xff0c;如连接数据库、执行查询和插入数据等。在本文…

Unity ShaderGraph 技能冷却转圈效果

Unity ShaderGraph 技能冷却转圈效果 前言项目场景布置代码编写ShaderGraph 连线总结 参考 前言 遇到一个需求&#xff0c;要展示技能冷却的圆形遮罩效果。 项目 场景布置 代码编写 Shader核心的就两句 // 将uv坐标系的原点移到纹理中心 float2 uv i.uv - float2(0.5, 0…

安装VS Code到AWS EC2 Linux 2

文章目录 小结问题及解决参考 小结 本文记录了安装VS Code到AWS EC2 Linux 2。 问题及解决 安装VS Code到AWS EC2 Linux 2采取了以下步骤&#xff1a; 更新VS Code的YUM源&#xff1a; [ec2-userip-100-92-28-119 ~]$ sudo rpm --import https://packages.microsoft.com/k…

Typora+PicGo+Gitee构建云存储图片

创建Gitee仓库 首先&#xff0c;打开工作台 - Gitee.com&#xff0c;自行注册一个账户 注册完后&#xff0c;新建一个仓库&#xff08;记得仓库要开源&#xff09; 然后创建完仓库后&#xff0c;鼠标移动到右上角头像位置&#xff0c;选择设置&#xff0c;并点击&#xff…

深度生成模型之GAN基础 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN基础生成对抗网络1. 生成对抗网络如何生成数据2. 生成对抗原理3. GAN的核心优化目标4. D的优化5. GAN的理想状态6. GAN的训练7. 梯度不稳定与模式崩塌(collapse mode)问题8. 梯度消失问题 深度生成模型之GAN基础 生成对抗网络 1. 生成对抗网络如何…

安全数据交换系统:有效提升网间文件交换能力

各级政府部门和金融、能源、电力这些行业&#xff0c;以及一些大中型企业组织&#xff0c;为了保护内部的重要数据不外泄&#xff0c;普遍都采用了多网络并行的方式&#xff0c;也是做了网络隔离划分&#xff0c;不同的网络拥有不同的密级以及人员权限。然后再通过安全数据交换…

机器人动力学一些笔记

动力学方程中&#xff0c;Q和q的关系(Q是sita) Q其实是一个向量&#xff0c;q(Q1&#xff0c;Q2&#xff0c;Q3&#xff0c;Q4&#xff0c;Q5&#xff0c;Q6)&#xff08;假如6个关节&#xff09; https://zhuanlan.zhihu.com/p/25789930 举个浅显易懂的例子&#xff0c;你在房…

大文件断点下载Range下载zip包显示文件损坏

问题&#xff1a;大文件下载&#xff0c;其它格式的文件及rar格式的压缩包正常下载但是 之后zip包下载后解压失败 原因分析: 1. 查看上传文件的属性值 如图&#xff0c;10.4kb是已经约去小数点的值&#xff0c;准确的大小应该是10663字节10.4130859375KB&#xff0c;所以用10.…

微服务-理论(CAP,一致性协议)

CAP理论 关于CAP理论的介绍可以直接看这篇文章 CAP分别是什么&#xff1f; 一致性&#xff08;Consistency 一致性包括强一致性&#xff0c;弱一致性&#xff0c;最终一致性。 一致性其实是指数据的一致性&#xff0c;为什么数据会不一致呢&#xff1f; 如上面这张图&…

R语言——reshape2包、tidyr包、dplyr包(五)

目录 一、数据转换之reshape2包&#xff1a;melt与dcast函数 二、数据转换之tidyr包&#xff1a;gather与spread函数&#xff0c;separate与unite函数 三、据转换之dplyr包 四、参考 一、数据转换之reshape2包&#xff1a;melt与dcast函数 merge 函数 使用merge函数 x &l…

每日一练:LeeCode-739. 每日温度(中)【单调栈】

本文是力扣LeeCode-739. 每日温度&#xff08;中&#xff09; 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其…

SQL Server 备份和还原

CSDN 成就一亿技术人&#xff01; 难度指数&#xff1a;* CSDN 成就一亿技术人&#xff01; 目录 1. 备份 01. 为什么要备份&#xff1f; 02. 备份的类型 03. 备份实例 2. 还原 01. 还原类型 02. 删除数据库 03. 还原数据库 测试 04. 恢复失败的原因 1. 备份 01.…

冒泡排序-排序算法

前言 如果有6个人站成一排&#xff0c;要将他们按从矮到高的顺序排列。你可能有多种方式来完成。但是如果其中有一个人特别高&#xff0c;比他身边的人高&#xff0c;在队伍中特别明显&#xff0c;你可以轻易看出那个最高的需要和身边的人交换位置&#xff0c;这是冒泡排序的核…