计操进程同步(信号量pv灵魂三问法狂练版)

文章目录

  • 解题秘诀-灵魂三问法
  • 一 同步问题
    • 1.1 围棋问题
    • 1.2 数据采集问题
    • 1.3 三进程文件打印问题
    • 1.4 司机售票员问题
  • 二 同步+互斥问题
    • 2.1 果盘问题
  • 三 同步+资源管控问题
    • 3.1 兔子问题
    • 3.2 数据写入和读取问题
    • 3.3 图书馆问题
    • 3.4 超市问题
      • 3.4.1 解法一
      • 3.4.2 解法二

解题秘诀-灵魂三问法

  • 问题类型的基础知识,参看计算机操作系统进程同步(信号量pv专题)第四部分
    在这里插入图片描述

一 同步问题

1.1 围棋问题

  • 在一个盒子里,混装了数量相等的黑白围棋子。现在用自动分拣系统把黑子、白子分开,设分抹系统有两个进程P1和P2,其中P1拣白子P2拣黑子。规定当一个进程拣了一子后,必须让另一个进程去抹。用信号量和PV操作协调两进程的活动
    在这里插入图片描述
    在这里插入图片描述

1.2 数据采集问题

  • 某控制系统中,数据采集进程负责把采集到的数据放到一缓冲区中;分析进程负责把数据从缓冲区中取出进行分析,试用信号量实现两者之间的同步
    在这里插入图片描述
    在这里插入图片描述

1.3 三进程文件打印问题

  • 有三个进程 PA、PB 和 PC 合作解决文件打印问题:
    • PA将文件记录从磁盘读入主存的缓冲区 1,每执行一次读一个记录;
    • PB 将缓冲区 1 的内容复制到缓冲区 2,每执行一次复制一个记录;
    • PC 将缓冲区 2 的内容打印出来,每执行一次打印一个记录。缓冲区的大小等于一个记录的大小。请用 PV 操作来保证文件的正确打印
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

1.4 司机售票员问题

  • 在公共汽车上,司机和售票员的活动分别是:司机活动:启动车辆->正常运行->到站停车;售票员活动:关车门->售票->开车门。在汽车不断的到站,停车,行驶过程中,司机和售票员的活动有什么同步关系?用信号量和P,V操作实现
    在这里插入图片描述
  • 解析:在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开车门让乘客上下车。
    因此司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得向步。,应设置两个信号量:s1、s2,s1表示是否允许司机启动汽车,其初值为0:s2表示是否允许售票员开门,其初值为0。
    在这里插入图片描述

二 同步+互斥问题

2.1 果盘问题

  • 一家四人父、母、儿子、女儿围桌而坐;桌上有一个水果盘;当水果盘空时,父亲可以放香蕉或者母亲可以放苹果,但盘中已有水果时,就不能放,父母等待。当盘中有香蕉时,女儿可吃香蕉,否则,女儿等待;当盘中有苹果时,儿子可吃,否则,儿子等待。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

三 同步+资源管控问题

3.1 兔子问题

  • 有一只最多能装 2 只兔子的铁笼子,猎人仅能向笼子中放入兔子(每次只能放入 1 只),若笼子是满的,则猎人必须等待;饭店老板仅能从笼子中取兔子(每次只能取出 1 只),若笼子是空的则他也必须等待。假设初始时笼子是空的。定义信号量并初始化,使用 P、V 操作模拟猎人和饭店老板进程之间的同步与互斥
    在这里插入图片描述
    在这里插入图片描述

3.2 数据写入和读取问题

  • 设有一缓冲池P,P中含有20个可用缓冲区,一个输入进程将外部数据读入P,另有一个输出进程将P中数据取出并输出。若讲程每次操作均以一个缓冲区为单位,试用记录型信号量写出两个进程的同步算法,要求写出信号量的初值。
    在这里插入图片描述
semaphore mutex=1; 
semaphore empty=20;
semaphore full=0;
int in,out = 0;
item p [20]; 
void Producer(){
	while(ture){
      producer an item in nextp;
      wait(empty);
      wait(mutex);
      p[in] := nextp;
      in := (in+1) mod 20;
      signal(mutex);
      signal(full);
   }
}
void Consumer(){
  while(ture){
 	 wait(full);
     wait(mutex);
     nextc := p[out];
     out := (out+1) mod 20;
     signal(mutex);
     signal(empty);
	}
}

3.3 图书馆问题

  • 图书馆规定,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。(1)用信号量实现读者之间的互斥登记和注销;(2)图书馆共有100个座位,当图书馆中没有空座位时,后到的读者在图书馆要等待寺(阻塞)
    在这里插入图片描述
    在这里插入图片描述

3.4 超市问题

  • 有一个超市,最多可容纳N个人进入购物,当N个顾客满员时,后到的顾客在超市外等待;超市中只有一个收银员。可以把顾客和收银员看作两类进程,两类进程间存在同步关系。写出用P、V操作实现的两类进程的算法
    在这里插入图片描述

3.4.1 解法一

在这里插入图片描述

  • 设一个整型变量S,同一个队列相对应。在S上定义两种操作:P操作和V操作。
    • 执行一次P操作,信号量S减1,S≥0时,调用P操作的进程继续执行;S<0时,该进程被阻塞,并且被插入到等待队列中。
    • 执行一次V操作,信号量S加1,当S≥0时,调用V操作的进程继续执行:S≤0时,从信号量S对应的等待队列中选出一个进程进入就绪状态[3]。
  • 在本题中,超市是公有资源,所以设置一个互斥信号量Sn,初值为n。当顾客进入超市时,首先要P(Sn),离开时V(Sn)。 因为顾客进程和收银员进程之间是同步关系,整个超市只有一个收银员,一次只能有一个顾客付款,所以必须为收银员进程及顾客进程各设置一个私有信号量S1和S2,初值分别为0,0。顾客买完东西,去付款时,执行V(S1),通知收银员有顾客付款。收银员进程此时就可以执行P(S1),进入收费。收费完毕,收银员进程执行V(S2),通知顾客进程。而顾客进程此时继续执行P(S2),即可离开收银台。最后,执行V(Sn),离开超市,释放资源。
    在这里插入图片描述

3.4.2 解法二

  • 超市能容纳N个顾客需要1个资源信号量s;
  • 顾客购物后可以找收银员结账需要1个同步信号量sl;
  • 收银员同一时间只能为1个顾客结账需要1个互斥信号量mutex;
  • 收银员结账过后顾客才能离开需要1个同步信号量s2;【小结】共需要4个信号量,1个资源s、1个互斥mutex和2个同步信号量s1和s2。
    在这里插入图片描述
    在这里插入图片描述

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

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

相关文章

(Matlab)基于CNN-Bi_LSTM的多维时序回归预测(卷积神经网络-双向长短期记忆网络)

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分代码展示: 四、完整代码数据下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平…

【idea】idea 开发快捷键

在Java开发中,有一些常用的快捷键和工具,可以提高开发效率。以下是一些常见的Java开发常用到的功能和快捷键: IDE快捷键: 代码大小写切换: ctrlshiftu 格式化代码:Ctrl Alt L,会让代码更整…

程序员必知!备忘录模式的实战应用与案例分析

备忘录模式允许在不破坏封装性下捕获并在外部保存对象状态,支持状态恢复,常用于撤销、历史记录等功能。例如在线文档编辑器的撤销操作,编辑器作为原发起人记录状态并提供保存与恢复方法,历史记录或撤销为管理者,保存备…

Nodejs+express后端学习笔记(1)

1 Node.js安装 1、下载安装包:进入官网(https://nodejs.org/en),下载左侧的稳定版。 2、选择安装位置,不用勾选自动安装必要工具。 其他都默认Next。 配置环境,具体参考本文章: https://blo…

Linux系统——nmap安装与使用

一、安装nmap 1、安装nmap 【操作命令】 yum install nmap 2、查看nmap版本 【操作命令】 nmap -version 【操作实例】 3、卸载nmap 【操作命令】 yum remove nmap 二、简单使用方法 1、扫描指定ip 【操作命令】 nmap 192.168.1.1 2、扫描指定端口 【操作命令】 …

数据库管理-第130期 JSON二元性(20240109)

数据库管理130期 2024-01-09 第130期 JSON二元性(20240109)1 简介2 关系型表和JSON存储的优劣3 Oracle JSON关系型二元性视图总结 第130期 JSON二元性(20240109) 上周,又双叒飞了一趟上海,也是2024年第一飞…

Java内存模型(JMM)是基于多线程的吗

Java内存模型(JMM)是基于多线程的吗 这个问题按我的思路转换了下,其实就是在问:为什么需要Java内存模型 总结起来可以由几个角度来看待「可见性」、「有序性」和「原子性」 面试官:今天想跟你聊聊Java内存模型&#…

即时设计:设计稿与PPT完美结合,让您的创意作品更具影响力

PPT助手 更多内容 在设计领域,将设计稿与PPT结合起来,可以让您的作品更具吸引力和影响力。为了满足这一需求,我们向您推荐一款强大的设计工具,它可以将设计稿导出为PPT文件,支持线上预览和编辑,让您的创意…

ADS仿真 之 容差/良率分析

之所以要进行容差分析, 是因为任何电子元器件均存在一定的误差, 如电感、电容的精度等。 例如一个标称为2.0nH0.1nH的电感,代表的意思产品有99.74%的概率落在2.0nH0.1nH范围内, 即满足6σ ,σ是标准偏差或者说方差&…

OpenHarmony沙箱文件

一.前言 1.前景提要 DevEcoStudio版本:DevEco Studio 3.1 Release SDK版本:3.2.2.5 API版本:9 2.概念 在openharmony文件管理模块中,按文件所有者分类分为应用文件和用户文件和系统文件。 1)沙箱文件。也叫做应…

C++类和动态内存分配

目录 1. C类的基本概念与使用 2. 动态内存分配与指针 3. 类与动态内存分配的结合应用 4. 注意事项与最佳实践 5.一个简单的示例代码 在C编程中,类是一种重要的概念,它允许我们将数据和操作封装在一起,以实现更加模块化和可维护的代码。而…

运用AI翻译漫画(二)

构建代码 构建这个PC桌面应用,我们需要几个步骤: 在得到第一次的显示结果后,经过测试,有很大可能会根据结果再对界面进行调整,实际上也是一个局部的软件工程中的迭代开发。 界面设计 启动Visual Studio 2017, 创建…

数据结构与算法 - 线性表

文章目录 第1关:实现一个顺序存储的线性表第2关:实现一个链接存储的线性表 第1关:实现一个顺序存储的线性表 编程要求 本关任务是实现 step1/Seqlist.cpp 中的SL_InsAt、SL_DelAt和SL_DelValue三个操作函数,以实现线性表中数据的…

[答疑]领域特定语言DSL属于伪创新吗(谷爱凌)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 Zeyu 2024-1-4 9:20 马丁福勒的领域特定语言DSL是否有阅读的价值?属于伪创新吗? UMLChina潘加宇 这个问题就有点伪创新 ,让人误以为DSL是Fowler发…

本地部署Canal笔记-实现MySQL与ElasticSearch7数据同步

背景 本地搭建canal实现mysql数据到es的简单的数据同步,仅供学习参考 建议首先熟悉一下canal同步方式:https://github.com/alibaba/canal/wiki 前提条件 本地搭建MySQL数据库本地搭建ElasticSearch本地搭建canal-server本地搭建canal-adapter 操作步骤…

shp与数据库(插入数据)

前言 正文 geopandas与shp文件创建表和录入数据 解释一下上面的代码 查询cd2表的geometry字段 查看一下表 前一篇博客的冲突 问题的解决 POLYGON与MUTLIPOLYGON的说明 解决问题的代码 修改表的创建 shapefile和sqlalchemy插入数据 数据库查询 最后 前言 前一篇讲解…

与AI合作 -- 写一个modern c++单例工厂

目录 前言 提问 bard给出的答案 AI答案的问题 要求bard改进 人类智能 AI VS 人类 前言 通过本文读者可以学到modern C单例模式工厂模式的混合体,同时也能看到:如今AI发展到了怎样的智能程度?怎样让AI帮助我们快速完成实现头脑中的想法&…

【hcie-cloud】【17】华为云Stack灾备服务介绍【灾备方案概述、备份解决方案介绍】【上】

文章目录 前言灾备方案概述灾备的定义灾备的重要性故障和灾难对业务连续性带来的挑战灾备系统的衡量指标RTO与RPO分析 灾备等级标准数据中心容灾解决方案全景图云灾备服务总结架构华为云Stack灾备服务总览 备份解决方案介绍云备份服务介绍备份服务架构介绍云备份服务组件功能介…

界面原型设计工具有哪些?看看这9个

界面原型设计是现代设计师必备的技能之一。在设计数字产品或应用程序时,界面原型是将概念转化为具体可交互界面的重要步骤。对于新手小白来说,选择一款易于上手且功能强大的界面原型设计工具至关重要。本文将介绍 9 个常用的界面原型设计工具&#xff0c…

计算机体系结构动态调度(计分板及Tomasulo)学习记录

1.动态调度核心思想:允许就绪指令越过前方停顿指令,提前进入运行(乱序执行) 就绪指令指不存在资源冲突、操作数已就绪的指令,例如,计分板算法使用计分板来实现,Tomasulo使用保留站来实现&#…