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

news2024/9/21 0:40:57

文章目录

  • 解题秘诀-灵魂三问法
  • 一 同步问题
    • 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。
    在这里插入图片描述
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ODBC的数据库应用(MFC)

文章目录 1.预备知识1.数据库概述1.数据库和DBMS2.结构化查询语言SQL(Structured Query Language)3.数据库方式种类1.ODBC(Open DataBase Connectivity)开放数据库连接2.DAO(Data Access Objects)数据访问对象3.OLE DB(OLE数据库) 2.MFC ODBC1.CRecordset类构造记录集属性记录集…

c++学习:容器stack栈+queue+map(简易输入法)+deque

目录 stack 模板原型 头文件 模板的成员类型和成员对象和成员函数 栈类模板的容器对象 实例 queue 模板原型 头文件 模板的成员类型和成员对象和成员函数 队列类模板的容器对象 实例 map 模板原型 头文件 模板的成员类型和成员对象和成员函数 关联类模板的容器…

天锐绿盾|绿盾加密软件|电脑文件防泄密|文件加密|图纸加密软件|源代码加密|源代码防泄密系统|公司办公终端核心文件数据\资料防止外泄管理软件系统!

天锐绿盾是一款专业的数据加密和管理软件,旨在保护企业的重要数据不被泄露或损坏。该软件采用了先进的加密技术,确保数据在存储、传输和使用过程中的安全性。同时,天锐绿盾还提供了完善的管理功能,方便企业对加密数据进行统一管理…

分布式系统架构设计之分布式消息队列架构解析

分布式消息队列架构是构建在分布式系统之上的消息队列架构,旨在提高高性能、高可用性和可伸缩性。它包括以下架构相关部分: 1、架构优势 分布式消息队列架构的优势主要体现在以下几个方面: 01 高可用性 在分布式消息队列架构中&#xff0…

Unity组件开发--相机跟随角色和旋转

1.相机跟随组件,节点: 2.相机跟随组件脚本: using System; using System.Collections; using System.Collections.Generic; using Unity.Burst.Intrinsics; using UnityEngine; using UnityEngine.UI;public class CameraFollow : Singleton&…

【经验分享】如何看论文的分区、SCI检索号、EI检索号等信息

0 前言 一般而言,被SCI检索的论文,都会同时被EI检索。我们以论文《Learning Disentangled Representation for Multimodal Cross-Domain Sentiment Analysis》为例,讲解一下如何查询论文的各项信息。 我们首先百度这个论文 可以看到它是发表…

python 基础语法 异常 模块 包

异常捕获 try:f open("./abc.txt","r",encoding"UTF-8") except:print("")f open("./abc.txt","w",encoding"UTF-8")#指定异常 try:print(xxx_test) except NameError as e:print(f"error{e}&q…

【科技素养题】少儿编程 蓝桥杯青少组科技素养题真题及解析第22套

少儿编程 蓝桥杯青少组科技素养题真题及解析第22套 1、植物的叶子多为绿色,这主要是因为它们含有 A、绿色色素 B、叶绿素 C、花青素 D、细胞 答案:B 考点分析:主要考查小朋友们生物知识的储备;叶绿素是植物叶子中的一种色素,它可以吸收太阳光中的能量并转化为植物所…

【代码复现系列】paper:CycleGAN and pix2pix in PyTorch

或许有冗余步骤、之后再优化。 1.桌面右键-git bash-输入命令如下【git clone https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix】 2.打开anaconda的prompt,cd到pytorch-CycleGAN-and-pix2pix路径 3.在prompt里输入【conda env create -f environment.y…

数据结构-测试4

一、判断题 1.队列结构的顺序存储会产生假溢出现象。 (T) 2.度为二的树就是二叉树。(F) 二叉树的度可以小于等于2 3. 栈是插入和删除只能在一端进行的线性表;队列是插入在一端进行,删除在另一端进行的线性表。(T&…

使用GraphQL实现简单的增删改查

使用GraphQL实现简单的增删改查 GraphQL官网:https://graphql.cn/ Altair Graphql 调试工具:https://saltair.sirmuel.design/#download 或者添加扩展使用网页版:https://chrome.google.com/webstore/detail/altair-graphql-client/flnheeel…

Ubuntu上安装VMware+win11系统手册

Ubuntu安装vmware 下载: Linux 版下载地址:https://www.vmware.com/go/getworkstation-linux 安装: sudo chmod x VMware-Workstation-Full-17.5.0-22583795.x86_64.bundle 执行安装命令: sudo ./VMware-Workstation-Full-17.5.0…

4.1 Importance of Memory Access Efficiency

到目前为止,我们已经学会了如何编写CUDA内核函数,以及如何通过大量线程配置和协调其执行。在本章中,我们将研究如何组织和定位数据,以便通过大量线程进行高效访问。我们在第2章中讨论了数据并行计算,即数据首先从主机内…

哈希-力扣350. 两个数组的交集Ⅱ

题目 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 示…

Hyperledger Fabric 核心概念与组件

要理解超级账本 Fabric 的设计,首先要掌握其最基本的核心概念与组件,如节点、交易、排序、共识、通道等。 弄清楚这些核心组件的功能,就可以准确把握 Fabric 的底层运行原理,深入理解其在架构上的设计初衷。知其然,进…

Requests库的接口测试实现

Requests库是在接口测试中被广泛运用的库,包括模拟请求的下发,请求相关配置和响应结果的获取,核心主体都是通过request库完成。在接口测试中使用非常频繁。 一、Requests库环境搭建 接口测试的核心从模拟请求开始。在Python中,通…

Postgres 中文周报:PostgreSQL 2023 热门回顾

2024 新年好!原英文 Postgres Weekly 最新一期回顾了 2023 周刊中的热门点击文章、视频与工具等事项。当然,PostgreSQL 在 2023 年值得回顾的瞬间还有很多,远不止周刊中提到的。因此,在编译原周刊内容的基础上,我们增加…

mysql+关掉密码过期

mysql关掉密码过期 要在MySQL中关闭密码过期功能,可以按照以下步骤进行操作: 登录到MySQL服务器。 使用管理员账户(如root)连接到数据库。 mysql -uroot -ppassword 运行以下命令来查看当前的密码过期设置: SHOW…

学校服务器安装anaconda并配置pytorch环境

学校服务器安装anaconda并配置pytorch环境 1.下载Anaconda2.传到xftp中3.在终端运行脚本命令4.安装pytorch4.1 查看cuda版本4.2 创建自己的环境4.3 下载pytorch4.4 验证pytorch是否安装成功 参考视频:远程服务器安装anaconda并配置pytorch环境 使用服务器运行项目&a…

回顾2023编程之旅

一、前言 看在给了我一个博客专家的份上就继续写写博客,实事求是的讲如果是工作之余去总结csdn写写技术博客,还想混个专家什么的,真的是精力不够。因为里面的灌水的实在太多,比不过的,写这个玩意必须得淡泊名利才能悠然…