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

2024-01-09 09:28

本文主要是介绍计操进程同步(信号量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。
    在这里插入图片描述
    在这里插入图片描述

这篇关于计操进程同步(信号量pv灵魂三问法狂练版)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/586656

相关文章

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

k8s 存储(PV、PVC、SC、本地存储、NFS)

存储持久化相关三个概念: PersistentVolume (PV) 是对具体存储资源的描述,比如NFS、Ceph、GlusterFS等,通过PV可以访问到具体的存储资源;PersistentVolumeClaim (PVC) Pod想要使用具体的存储资源需要对接到PVC,PVC里会定义好Pod希望使用存储的属性,通过PVC再去申请合适的存储资源(PV),匹配到合适的资源后PVC和PV会进行绑定

Linux多线程——POSIX信号量与环形队列版本之生产消费模型

文章目录 POSIX信号量POSIX的操作初始化销毁等待信号量(申请资源)发布信号量(放下资源) 环形队列之生产消费模型 POSIX信号量 POSIX信号量和System V信号量是不同的标准 但是实现的功能是一样的,都是为了解决同步的问题 我们说信号量指的就是资源的数量 在生产者与消费者模型里面,生产者与消费者所认为的资源是不同的 生产者认为空间是资源,因为每次都要

信号与信号量的区别[转]

信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Se

全网第一 | Flink学习面试灵魂40问答案,文末有福利!

大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! 来源:王知无 作者:王知无 By 暴走大数据 场景描述:这是一份Flink学习面试指北。看看你搞清楚自己的定位没有? 关键词:Flink 学

全网第一份 | Flink学习面试灵魂40问,看看你能答上来几个?

《2021年最新版大数据面试题全面开启更新》 答案将在下期给出。   概念和基础篇   简单介绍一下Flink Flink相比传统的Spark Streaming有什么区别?和Spark中的structured streaming 相比呢?Flink相比ss和storm有什么优势? Flink的组件栈是怎么样的? Flink的基础编程模型了解吗?

使用信号量实现一个限流器:C++实战指南

使用信号量实现一个限流器:C++实战指南 在现代软件开发中,限流器(Rate Limiter)是一种常用的技术,用于控制系统的请求速率,防止系统过载。信号量(Semaphore)是一种强大的同步原语,可以用于实现限流器。本文将详细介绍如何在C++中使用信号量实现一个限流器,并提供完整的代码示例和详细的解释。 什么是限流器? 限流器是一种控制系统请求速率的机制,确保在单位时间内处理的请求数量不

1--程序设计的灵魂—算法

一:算法 特定问题求解步骤的描述 在计算机中表现为指令的有限序列 算法是独立存在的一种解决问题的方法和思想 对于算法而言,语言不重要,重要的是思想 二:算法特性 输入:有0个或多个输入 输出:至少一个输出 有穷:有限步骤之后自动结束 确定:每一步都有确定的含义 可行:每一步可行 三:算法设计准则 正确性,可读性,健壮性,高性价比 程序=数据结构+算法 四:影

K8s的Pv和Pvc就是为了pod数据持久化

一、 1.pv(persistent volume):是k8s虚拟化的存储资源,实际上就是存储,列如本地的硬盘、网络文件系统(Nfs)、lvm、RAID、云存储。 2.pvc:pod对存储资源的请求,定义了需要存储的空间大小,以及对存储空间的访问模式,有了pvc请求之后,再和pv进行匹配,匹配到了之后进行绑定,绑定成功之后就可以使用pv的存储空间。 二、pv和pvc生命周期 1.配置定

linux进程同步机制

为了能够有效的控制多个进程之间的沟通过程,保证沟通过程的有序和和谐,OS必须提供一定的同步机制保证进程之间不会自说自话而是有效的协同工作。比如在共享内存的通信方式中,两个或者多个进程都要对共享的内存进行数据写入,那么怎么才能保证一个进程在写入的过程中不被其它的进程打断,保证数据的完整性呢?又怎么保证读取进程在读取数据的过程中数据不会变动,保证读取出的数据是完整有效的呢? 常用的同步方式有: 互斥