操作系统PV操作题整理2
1.某进程中有3个并发执行的线程thread1、thread2、thread3,其伪代码如下所示。请添加必要的信号量和P、V操作,要求确保互斥访问临界资源
//复数的结构类型定义
typedef struct
{float a;float b;
}cnum;cnum x,y,z; //全局变量//计算两个复数之和
cnum add( cnum p,cnum q)
{cnum s;s.a=p.a+q.a;s.b=p.b+q.b;return s;
}thread1
{cnum w;w=add(x,y);...
}thread2
{cnum w;w=add(y,z);...
}thread3
{cnum w;w.a=1;w.b=2;z=add(z,w);y=add(y,w);...
}
先找出线程在各个变量的互斥关系,并发关系。如果是一读一写或两个都写,那么就是互斥关系。每一个互斥关系都需要一个信号量来调节。
semaphore mutex_y1; //mutex_y1用于thread1和thread3对变量y的互斥访问
semaphore mutex_y2; //mutex-y2用于thread2和thread3对变量y的互斥访问
smeaphore mutex_z; ///mutex_z用于变量z的互斥访问//复数的结构类型定义
typedef struct
{float a;float b;
}cnum;cnum x,y,z; //全局变量//计算两个复数之和
cnum add(cnum p,cnum q)
{cnum s;s.a=p.a+q.a;s.b=p.b+q.b;return s;
}thread1
{cnum w;wait(mutex_y1);w=add(x,y); //thread1 和thread2都有y作为参数,是两个都读,不存在互斥问题,thread1对y的操作是读,thread3对y的操作是既读又写存在互斥signal(mutex_y1);...
}thread2
{cnum w;wait(mutex_y2);wait(mutex_z);w=add(y,z); // 同样thread2和thread3对y的操作是读和写,需要互斥,对z的操作也需要互斥signal(mutex_z);signal(mutex_y2);...
}thread3
{cnum w; //注意:w不是全局变量,只在自己的线程内作用,不属于临界资源w.a=1;w.b=2;wait(mutex_z);z=add(z,w);signal(mutex_z);wait(mutex_y1);wait(mutex_y2);y=add(y,w);signal(mutex_y1);signal(mutex_y2);...
}
2.有A、B两人通过信箱进行辩论,每个人都从自己的信箱中取得对方的问题,将答案和向对方提出的问题组成一个新邮件放入对方的邮箱中。假设A的信箱最多放M个邮件,B的信箱最多放N个邮件。初始A的信箱有x个邮件,B的信箱有y个邮件。当信箱不空时,辩论者才能从邮箱中取邮件,否则等待。当信箱不满时,辩论者才能将邮件放入信箱中,否则需要等待。
semaphore mutex_A; //用于对A邮箱的互斥
semaphore mutex_B; //用于对B邮箱的互斥
semaphore Empty_A; //A邮箱中还可以放入的邮件数量
semaphore full_A; //A邮箱中的邮件数量
semaphore Empty_B; //A邮箱中还可以放入的邮件数量
semaphore full_B; //B邮箱中的邮件数量Cobegin{A{while(true){P(full_A);P(mutex_A);take out a mail from box A;V(mutex_A);V(Empty_A);answer a question and put forward one;P(Empty_B);P(mutex_B);put a new mail in box B;V(mutex_B);V(full_B);}}B{while(true){P(full_B);P(mutex_B);take out a mail from box B;V(mutex_B);V(Empty_B);answer a question and put forward one;P(Empty_A);P(mutex_A);put a new mail in box A;V(mutex_A);V(full_A);}}
}end
3.系统中有多个生产者消费者进程,共享一个能存放1000件产品的缓冲区(初始为空)。当缓冲区未满时,生产者进程可以放入一个其生产的产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者必须连续取走10件铲平后,其他消费者进程才可以取产品。
semaphore mutex1=1; //用于实现消费者连续取10个产品的互斥
semaphore mutex2=1; //用于实现缓冲区访问的互斥
semaphore empty=1000;
semaphore full=0;
producer()
{while(1){produce a product;P(empty);P(mutex2);put product in the buffer;V(mutex2);V(full);}
}consumer()
{while(1){P(mutex1);for(int i=0;i<10;++i){P(full);P(mutex2);take out a product from the buffer;V(mutex2);V(empty);consume this product;}V(mutex1);}
}
4.某博物馆最多可容纳500人同时参观,有一个出入口,该初入口一次仅允许一个人通过。
semaphore empty=500;
semaphore mutex=1;Cobegin
visitor process i:
{P(empty);P(mutex);enter...;V(mutex);visit...;P(mutex);get out;V(mutex);V(empty);
}
5.某银行提供一个服务窗口和10个供顾客等待的座位。顾客到达银行时,若有空座位,则到取号机上取一个号,取号机一次仅允许一个顾客使用。营业员通过叫号选择一位顾客为其服务。
semaphore empty=10; //空座位数量
semaphore mutex=1; //互斥使用取号机
semaphore full=0; //已经占空位数量
semaphore service=0; //等待叫号process client i{P(empty); //等空位P(mutex);take a number from the machine;V(mutex);V(full); //通知营业员有新顾客P(service); //等待营业员叫号accept serive;
}process teller{while(true){P(full); //等待顾客V(empty);//离开座位V(service); //叫号 //这里我觉得应该是先叫号后离开座位,不过应该不影响serve for the client}
}
6.P1、P2、P3三个进程互斥使用一个包含N个单元的缓冲区,P1每次produce()一个正整数并用put()放入缓冲区某一空单元中;P2每次用getodd()从缓冲区取出一个奇数,并用countodd()统计奇数个数;P3每次用geteven()从缓冲区取出一个偶数,并用counteven()统计偶数个数。
semaphore mutex=1;
semaphore odd=0,even=0;
semaphore empty=N;
main()
cobegin()
{process P1(){while(true){x=produce();P(empty);P(mutex);put();V(mutex);if(x%2==0)V(even);elseV(odd);}}Process P2(){while(true){P(odd);P(mutex);getodd();V(mutex);V(empty);countodd();}}process P3(){while(true){P(even);P(mutex);geteven();V(mutex);V(empty);counteven();}}
}coend;
操作系统PV操作题整理2相关推荐
- 操作系统-PV操作-独木桥问题
操作系统-PV操作-独木桥问题 前言 问题描述 解决思路 伪代码实现 改造题型 解决思路 伪代码实现 总结 前言 在操作系统中,使用pv操作实现进程的同步和互斥是进程管理的重要内容.pv操作不仅是本科 ...
- 操作系统pv操作学习总结
PV操作 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思. 目录 1 简介 2 详细资料 3 解释 ▪ 信号量的概念 ▪ 典型理解偏差 简介 1962年,狄克斯特拉离开数学中心进入位于 ...
- 计算机信息技术会考操作题,信息技术会考操作题整理.doc
信息技术会考操作题整理 2009.3截屏操作题整理 单向选择题 2)小明用图像处理软件将自己一张照片的背景换成了蓝天白云,这一操作属于 A.加工信息B.发布信息C.管理信息D.获取信息 4)下图中有很 ...
- 计算机操作系统pv实验,计算机操作系统PV操作例题.doc
计算机操作系统PV操作例题 问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车.用PV操作来实现他们之间的协调. S1:是否允许 ...
- 操作系统-PV操作-理发师问题
操作系统-PV操作-理发师问题 前言 问题描述 解决思路 伪代码 总结 前言 hello,大家好,使用pv操作来实现进程的同步和互斥是我们本科授课的重点,同时也是研究生入学考试的重点考察题型.今天给大 ...
- 操作系统——PV操作
PV操作概念:操作系统中的一种同步机制,实现对于并发进程中临界区的管理. 并发进程分为两种: ①无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作. ②有交互的并发进程:多个进 ...
- 操作系统PV操作的几个例子
操作系统中PV操作的几个例子 题1:面包师有很多面包,由n个销售人员推销.每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲下来时,就叫下一个号.试设计一个使销售人员和顾客同步的算法. 思路:顾 ...
- 难懂的操作系统--PV操作
PV操作概念:操作系统中的一种同步机制,实现对于并发进程中临界区的管理. 并发进程分为两种: ①无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作. ②有交互的并发进程:多个进 ...
- 操作系统中pv操作用c语言,操作系统-pv操作.doc
<现代操作系统>课程设计 第 PAGE 5 页 共 NUMPAGES 20 页 课程设计报告(论文) 报告(论文)题目: PV操作解决生产者-消费者问题 作者所在系部: 计算机科学与工程系 ...
- 操作系统 | PV操作练习题汇总(一)
前言 这篇文章中整理了一些我们上课时老师给我们布置的一些PV操作的练习题,希望对大家有用处! 信号量有整型信号量(int)和记录型信号量(Semaphore)等,但是我们老师不是对这个很区分,所以这里 ...
最新文章
- 程序员下班不关电脑? | 每日趣闻
- 插入排序-by-Python
- C 语言判断大端小端
- Unity手游开发札记——移动平台的天气系统实现
- 微信小程序+微信公众号开发总结
- CSS的继承、权值与层叠
- ABP vnext模块化架构的最佳实践的实现
- Redis 常用配置参数
- Clickhouse:分区和数值化优化实测
- l455在线清零服务器,爱普生epson l455清零软件官方版
- 数字电视机顶盒的基本知识介绍
- Impdp Terminates With Error ORA-39126, LPX-00225
- 在Ubuntu安装Deepin软件
- 芯片行业常用的英文术语及其含义
- 有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业
- 【4.10 博弈论详解】
- 《黑客帝国》中的代码雨让人身临其境 利用Python轻松实现
- Chrome浏览器无法开启声音,并且音量合成器中没有选项
- 上交2017计算机专业就业,2017年大学专业就业率排行榜 看看有没有你喜欢的专业...
- 如何打造一篇优秀的简历