计操进程同步(信号量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

相关文章

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2  互斥 2.1 何为互斥?         互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不能够访问这个变量。那这种只有一个线程能够访问到这个变量的现象称之为线程间互斥。 2.2互斥锁API 1.

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里: https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案,而是为了帮助大家梳理 transformer的相关知识点,所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在这里找到: https://github.com/DA-southampton/NLP_ability 问题

Linux信号量机制总结与实例解析

目录   第一章:Linux信号量基础 1.1 信号量概念 1.2 信号量类型 1.3 信号量操作 1.4 实战案例:信号量在多线程同步中的应用 1.5 实战案例:信号量在进程间同步中的应用 第二章:Linux信号量高级应用 2.1 信号量与实时操作系统 2.2 信号量与网络编程 2.3 实战案例:分布式系统中的信号量应用 2.4 总结 第三章:Linux信号量实战案例分

EOS black灵魂回响黑色无法联机/联机报错/联机失败怎么办

灵魂回响黑色EOS black中的职业系统,自由度非常高。从人物属性的精细调整,到装备属性的独特搭配,再到技能的个性化组合,每一步都充满了无限可能。更为惊喜的是,游戏中的角色职业不是一成不变的,而是随着手中武器的变换而灵动转变。 这款游戏也是很适合叫上朋友一起玩,不过有玩家表示在游戏过程中遇到了EOS black灵魂回响黑色联机报错/联机失败/无法联机等类似联机问题。我们来看看有没有比较

第十五章(二) FIFO、消息队列及信号量

FIFO     FIFO也称为命名管道,没有了未命名管道只能在两个相关进进程之间才能运行的局限性;     通过FIFO, 两个不相关的进程也能交换数据。     FIFO是一种文件类型,通过stat结构的 st_mode 成员的编码可以知道文件是否是FIFO类型。 可以用 S_ISFIFO宏对此进行测试。     创建FIFO类似于 创建文件,路径名是事实存在的。     函数    in

多处理机操作系统:进程同步

目录 一.集中式与分布式同步方式 1.集中式同步 2.分布式同步 二.自旋锁 1.自旋锁的特点 2.自旋锁的缺点 3.自旋锁示例(伪代码) 三.读-复制-更新锁 1.RCU锁的特点 2.RCU锁的缺点 3. RCU锁示例(伪代码) 三.二进制数补偿算法和待锁 CPU 等待队列机构 二进制数补偿算法  1.概述: 2.优点: 3.缺点: 待锁 CPU 等待队列机

K8s持久化存储PV和PVC(通俗易懂)

一、PV和PVC的引入 Volume 提供了非常好的数据持久化方案,不过在可管理性上还有不足。 拿前面 AWS EBS 的例子来说,要使用 Volume,Pod 必须事先知道如下信息: 当前 Volume 来自 AWS EBS。EBS Volume 已经提前创建,并且知道确切的 volume-id。 Pod 通常是由应用的开发人员维护,而 Volume 则通常是由存储系统的管理员维护。开

posix信号量和systemv信号量

1. posix 无名信号量  : 进程持续 ,其实就是计数器不止1 的互斥锁 #include <stdio.h>#include <pthread.h>#include <semaphore.h>/*使用信号量保护临界资源的访问*//*临界资源*/char* data[5];int size = 0;/*信号量*/sem_t lock;void* task1(void* p

灵魂回响黑色EOS Black账号注册预创建角色+游戏客户端下载教程

新的一款MMORPG游戏:灵魂回响黑色已经在今天早上的11点正式开服了,游戏特色在于可以大规模的合作以及pvp游玩,而且游戏还可以支持离线状态下的游玩,这款游戏是前作灵魂回响的续作,在保留了前作玩法基础上,还添加了许多奇幻风的元素在游戏中,给玩家们带来了许多惊喜,同时游戏还优化了引擎,给玩家们带来了更加极致的游戏画面。 下面我给很多不了解游戏的玩家带来账号注册预创建角色+游戏客户端下载教

建立一个信号量, OSSemCreate()

程序清单 L6.9是OSSemCreate()函数的源代码。首先,它从空闲任务控制块链表中得到一个事件控制块[L6.9(1)],并对空闲事件控制链表的指针进行适当的调整,使它指向下一个空闲的事件控制块[L6.9(2)]。如果这时有任务控制块可用[L6.9(3)],就将该任务控制块的事件类型设置成信号量OS_EVENT_TYPE_SEM[L6.9(4)]。其它的信号量操作函数OSSem???()通过