1.今有一个文件F供进程共享,现把这些进程分为A、B两组,规定同组的进程可以同时读文件F;但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读文件F。试用P、V操作(记录型信号量)来进行管理。

这是读者-写者问题变形,文件F在A与B之间要进行互斥,设信号量Fmutex用来两组间互斥,显然每组的读者要进行计数,来说明有木有某组在读文件,需要2个计数变量c1和c2,再设信号量Asem和Bsem分别对2个计数变量c1和c2进行互斥访问。

Semaphore Fmutex=1,Asem=0,Bsem=0;
int c1=c2=0;
Cobegin
Pa(i=1,2,3...){P(Asem)c1++;if(c1==1)P(Fmutex)V(Asem)reading F;P(Asem)c1--;if(c1==0)V(Fmutex)V(Asem)
}
Pb(i=1,2,3...){P(Bsem)c2++;if(c2==1)P(Fmutex)V(Bsem)reading F;P(Bsem)c2--;if(c2==0)V(Fmutex)V(Bsem)
}
coend

2.过双道十字路口问题。

这个问题是读者-写着问题的变形,路口要在水平和垂直方向上进行互斥,但在p1和p3方向上不需要互斥;同样p2和p4方向上也不需要互斥。因此可以设p1和p3为一组,p2和p4为一组。设信号量mutex用来两组间互斥。每组上来车要进行计数,需要2个计数变量c1和c2,再设信号量sem13和sem24分别对2个计数变量c1和c2进行互斥访问。

Semaphore mutex=1,sem13=1,sem24=1;
int c1=2=0;
cobegin
p1(){P(sem13)c1++;if(c1=1) P(mutex)V(sem13)P1通过路口;P(sem13)c1--;if(c1==0)V(mutex)V(sem13)
}
p2(){P(sem24)c2++;if(c2==1)P(mutex)V(sem24)P2通过路口;P(sem24)c2--;if(c2==0)V(mutex)V(sem24)
}
p3(){P(sem13)c1++;if(c1=1) P(mutex)V(sem13)P3通过路口;P(sem13)c1--;if(c1==0)V(mutex)V(sem13)
}
p4(){P(sem24)c2++;if(c2==1)P(mutex)V(sem24)P4通过路口;P(sem24)c2--;if(c2==0)V(mutex)V(sem24)
}
coend

3.吃水果问题:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用P、V操作实现四人正确活动的程序。

父亲和母亲先放水果,儿子女儿再取水果;父亲与女儿,母亲与儿子是一个同步关系,父亲与母亲要竞争空盘子,但空盘子容量为2.

设信号量m1表示盘子空位,信号量m2表示儿子是否能取苹果,m3表示女儿能否取桔子。

int m1=2,m2=0,m3=0;
cobegin
p1(){while(1){洗桔子;P(m1);放桔子;V(m3);}
}
p2(){while(1){洗苹果;P(m1);放苹果;V(m2);}
}
p3(){while(1){P(m2);取苹果;V(m1);吃苹果;}
}
p4(){while(1){P(m3);取桔子;V(m1);吃桔子;}
}
coend

4.试利用记录型信号量写出一个不会出现死锁的哲学家进餐问题的算法。

解法一:

semaphore Chopstick[5],5;chopstick[0].value=chopstick[1].value=1;chopstick[2].value=chopstick[3].value=1;chopstick[4].value=1;S.value=4;//最多允许4个哲学家同时拿筷子process Pi()(i=0,1,2,3,4){//第i个哲学家进程    while(true){        wait(5);//看是否允许拿筷子        wait(chopstick[i]);//拿起左边筷子        wait(chopstick[(i+1)%5]);//拿起右边筷子        eating;        signal(chopstick[i]);//放下左边筷子        signal(chopstick[(i+1)%5]);//放下右边筷子        signal(5);        thinking;    }}parbegin//进程并发执行P0();P1();P2();P3();P4();parend

解法二:奇数号哲学家先拿左边筷子,然后再拿右边筷子;偶数号哲学家先拿右边筷子,然后再拿左边筷子。

semaphore chopstick[5];
chopstick[0].value=chopstick[1].value=1;
chopstick[2].value=chopstick[3].value=1;
chopstick[4].value=1;
parbegin
process Pi()(i=0,2,4){while(true){wait(chopstick[(i+1)%5]);wait(chopstick[i]);eating;signal(chopstick[(i+1)%5]);signal(chopstick[i]);thinking;}
}
process Pi()(i=1,2){while(true){wait(chopstick[i]);wait(chopstick[i+1]);eating;signal(chopstick[i]);signal(chopstick[i+1]);thinking;}
}
parend

5.假定阅览室最多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座位号等,离开时要撤掉登记内容。用P、V操作描述读者进程的同步算法。

6.公共汽车上司机和售票员问题。

设公共汽车上,司机和售票员的活动分别是:

司机:               售票员:

启动车辆               上下乘客

正常行车               关车门

到站停车               售票

开车门

上下乘客

在汽车不断到站,停车,行驶过程中,这两个活动的同步关系。

7.和尚打水问题。某寺庙,有小和尚和老和尚若干,有一个水缸,由小和尚提水入缸供老和尚饮用。水缸可以容纳10桶水,水取自同一口井中,由于水井口窄,每次只能容纳一个水桶取水。水桶总数为3个。每次入水、取水仅为一桶,且不可同时进行。请用PV原语写出协调小和尚和老和尚动作的程序。

转载于:https://www.cnblogs.com/changjue/p/10780806.html

操作系统PV编程题目总结一相关推荐

  1. 操作系统pv操作学习总结

    PV操作 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思. 目录 1 简介 2 详细资料 3 解释 ▪ 信号量的概念 ▪ 典型理解偏差 简介 1962年,狄克斯特拉离开数学中心进入位于 ...

  2. 操作系统-PV操作-独木桥问题

    操作系统-PV操作-独木桥问题 前言 问题描述 解决思路 伪代码实现 改造题型 解决思路 伪代码实现 总结 前言 在操作系统中,使用pv操作实现进程的同步和互斥是进程管理的重要内容.pv操作不仅是本科 ...

  3. 操作系统-PV操作-理发师问题

    操作系统-PV操作-理发师问题 前言 问题描述 解决思路 伪代码 总结 前言 hello,大家好,使用pv操作来实现进程的同步和互斥是我们本科授课的重点,同时也是研究生入学考试的重点考察题型.今天给大 ...

  4. PTA 基础编程题目集 6-6 求单链表结点的阶乘和

    PTA 基础编程题目集 6-6 求单链表结点的阶乘和 本题要求实现一个函数,求单链表L结点的阶乘和.这里默认所有结点的值非负,且题目保证结果在int范围内. 函数接口定义: int Factorial ...

  5. PTA 基础编程题目集 7-27 冒泡法排序 C语言

    PTA 基础编程题目集 7-27 冒泡法排序 C语言 将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们.通过一遍扫描,则最后一 ...

  6. PTA 基础编程题目集 7-33 有理数加法 C语言

    PTA 基础编程题目集 7-33 有理数加法 C语言 本题要求编写程序,计算两个有理数的和. 输入格式: 输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范 ...

  7. PTA 基础编程题目集 7-24 约分最简分式 C语言

    PTA 基础编程题目集 7-24 约分最简分式 C语言 分数可以表示为分子/分母的形式.编写一个程序,要求用户输入一个分数,然后将其约分为最简分式.最简分式是指分子和分母不具有可以约分的成分了.如6/ ...

  8. PTA 基础编程题目集 7-7 12-24小时制 C语言

    PTA 基础编程题目集 7-7 12-24小时制 C语言 编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间. 输入格式: 输入在一行中给出带有中间的:符号(半角的冒号)的24小时制 ...

  9. PTA 基础编程题目集 7-22 龟兔赛跑 C语言

    PTA 基础编程题目集 7-22 龟兔赛跑 C语言 乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息.乌龟每分钟可以前进3米,兔子每分钟前进9米:兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于 ...

  10. PTA 基础编程题目集 7-21 求特殊方程的正整数解 C语言

    PTA 基础编程题目集 7-21 求特殊方程的正整数解 C语言 输入样例1: 884 输出样例1: 10 28 20 22 输入样例2: 11 输出样例2: No Solution #include& ...

最新文章

  1. linux空白屏幕,如何在Linux中的Logitech R400上使空白屏幕键正常工作?
  2. MySQL与SQLServer的区别(一千条语句)
  3. 《研磨设计模式》chap10 中介者模式Mediator(2)应用举例
  4. mysql 终端 远程访问,通过终端连接到远程mysql
  5. java实现逾期提醒_信用卡逾期后的5个阶段 你都知道吗?
  6. 技术公开课:SQL Server 高可用性解决方案概述(下)
  7. bzoj 4975: 区间翻转(博弈)
  8. 拓端tecdat|R语言无监督学习:PCA主成分分析可视化
  9. Java中的浅克隆和深克隆
  10. plextv 找不到服务器,【Apple TV教程】从Plex流式传输
  11. ios微信支付服务器错误,iOS开发之-微信支付
  12. 堪培拉地理位置经纬度_澳大利亚堪培拉和悉尼及墨尔本的地理位置
  13. 关于arcgis server 发布地图的时候报错“Packaging succeeded but publishing failed“问题解决
  14. php 多关键字搜索,php 多关键字搜索示例
  15. java 获取 海康 视频流_海康网络摄像机调用SDK解码Java版
  16. leetcode简单1742/867
  17. 如何对需求进行排序?
  18. Win11家庭版如何安装组策略编辑器
  19. 彩光价格一般是多少_彩光祛斑价格一般是多少呢?
  20. 论文解析:理论分析Inception模块和GoogLeNet

热门文章

  1. easyexcel写动态表头(横向扩展)
  2. 求两函数交点c语言,怎样求两个函数关系式的交点坐标
  3. 过去分词和动词过去式区别
  4. 主板温度过高的原因是什么?主板温度高的原因和处理办法
  5. 第一章:计算机网络概述
  6. android netd的工作流程解析
  7. unity 摄像头跟着鼠标移动_lwj_unity_模拟第一人称摄像机前后左右移动、摄像机随鼠标移动旋转、鼠标点击添加物体...
  8. JAVA后台判断是否重复(编辑)
  9. MySQL--查询5天之内过生日的同事中的闰年2月29日问题的解决过程
  10. 严禁使用计算机存储,处理,传输涉密信息,非涉密计算机及其网络保密管理要求...