题目:在一个盒子里,混装了数量相等的黑白围棋子。现在用自动分拣系统把黑子、白子分开,设分拣系统有二个进程P1 和P2 ,其中P1 拣白子;P2 拣黑子。规定每个进程每次只拣一子;当一个进程在拣时,不允许另一个进程去拣;当一个进程拣了一子时,必须让另一个进程去拣。试写出两进程P1 和P2 能并发正确执行的程序。

分析:

PV操作的题,也就是与信号量处理相关的问题,对于学生而言,一般是比较棘手的。不知道该如何入手。一般而言,主要是上课听课不认真,另外就是没有做过练习题造成的。

信号量,说白了,就是生活中的一个标志。比如火车上的卫生间,为了防止大家误入,卫生间门上有个标志,进去了的人将标志设为“有人”,出来以后再设置为“无人”,大家约定,看到“有人”就不能进入,否则就可以进入。如果大家都遵守这个约定,那么就不会多个人一同进去了。“有人”“没人”就可以在计算机中用0和1来表示。卫生间进人,需要将“没人”变成“有人”,实际上就是将1变成0。人从卫生间出来,需要将“有人”变成“没人”,就是将0变成1。  好了,将1变成0,我们用P来表示(减一),将0变成1我们用V来表示(加一),P V操作就有了。

解决PV的习题,就是要想办法设置好这个标志,然后对标志进行加减操作。

解答:

思路一:

捡棋子,这个问题的关键就在于,我捡完了你捡,你捡完了我捡,不能连续捡。如果让两个进程在盒子里捡,那么很明显,我们要设置两个标志F1,F2。F1=1表示P1可以捡,F2=1表示P2可捡,另外P1,P2要约定好,某个进程准备捡的时候要先将自己的标志置0,捡完了,要把对方的标志置1。这样就可以防止两次连续进入了。

因此设置信号量:F1=0,F2=1(哪个为0,哪个为1无所谓)。

P1:

P(F1)

捡白子

V(F2)

P2:

P(F2)

捡黑子

V(F1)

思路二:

设置信号量s=1,代表盒子,盒子同一时刻只能有一个进程访问

设置信号量k=1,代表刚刚P1操作过。如果k=0,代表P2刚刚操作过。

P1:

P(s)

If(k=1)

{ 什么都不做}

else

{捡白子,k=1}

V(s)

P2:

P(s)

If(k=0)

{ 什么都不做}

else

{捡白子,k=0}

V(s)

思路二也是对的,程序也可以正确运行。但是相比思路一,思路二程序的效率肯定不高。

因此PV操作的答案是不唯一的。都可能对,且保证不出错,但是效率的高不高可不一定。

老羊快跑,欢迎关注。

一个P,V操作的习题相关推荐

  1. 桌上有一空盘,最多允许存放一个水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。

    问题描述:桌上有一空盘,最多允许存放一个水果.爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果. 试用P.V操作实现爸爸.儿子.女儿三个并发进程的同步. 问题分析及思路: 本题 ...

  2. 一个海底隧道中只有一个车道,规定同一个方向的可以连续过隧道。某方向有列车过隧道时,另一个方向的列车就要等待, 现在东岸和西岸都有列车要过隧道,如果把每个过隧道的列车看作一个进程,使用P、V操作

    海底隧道问题 一个海底隧道中只有一个车道,规定同一个方向的可以连续过隧道.某方向有列车过隧道时,另一个方向的列车就要等待, 现在东岸和西岸都有列车要过隧道,如果把每个过隧道的列车看作一个进程,为保证安 ...

  3. 桌上有一空盘,最多允许存放两只水果,爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,两个儿子专等吃盘中的桔子,两个女儿专等吃苹果。用P、V操作实现爸爸、妈妈、儿子、女儿四个并发进程的同步。

    放水果问题 桌上有一空盘,最多允许存放两只水果每次只能放入或是取出一只放一个苹果,爸爸只向盘中放一个苹果,妈妈只向盘中放一个桔子,两个儿子专等吃盘中的桔子,两个女儿专等吃苹果.用P.V操作实现爸爸.妈 ...

  4. 李白和杜甫共享一个棋盘下象棋。一个叫李白的程序,输出李白走的10步棋。一个杜甫程序,输出杜甫的10步棋,一个裁判程序裁定二者下棋。C++实现信号量及P、V操作。

    one.cpp #include <windows.h> #include <stdio.h>#define PROG_NAME "李白" HANDLE l ...

  5. 一阅览室只能容纳150人,当少于150人时,可以进入,否则,需在外等候,若将每一个读者作为一个进程,请用P、V操作编程(类C、类pascal),并写出信号量的初值。(PV操作伪代码)

    1.第一种情况:现实生活中阅览室的门可以同时进入或出去多个人,题目中也没有其他限定时,可以只设立同步信号量即可. 伪代码如下: int n = 150;semaphore empty = n;/*em ...

  6. 操作系统信号量与P、V操作 初步认识整理

    初步接触,若有不足之处,请各位不吝赐教.谢谢! 首先介绍:信号量 信号量包括整型信号量.结构型信号量.二值信号量. ① 整型信号量 最初,将信号量定义为一个共享的整型量,它保存可供使用的唤醒数目.如果 ...

  7. c语言p,用C语言实现P、V操作

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...

  8. LeetCode 1381. 设计一个支持增量操作的栈(deque/数组)

    1. 题目 请你设计一个支持下述操作的栈. 实现自定义栈类 CustomStack : CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容 ...

  9. 封装一个信号量集操作函数的工具

    信号量的概念参见这里. 与消息队列和共享内存一样,信号量集也有自己的数据结构: struct semid_ds { struct ipc_perm sem_perm;  /* Ownership an ...

最新文章

  1. 计算机网络解决数据包丢失,数据包丢失时网络控制系统的稳定性分析及设计
  2. 苦大仇深--写给想做产品的朋友们(二)
  3. DMDW集群配置到DEM
  4. 探索cqrs和事件源_编写基于事件的CQRS读取模型
  5. Git(9)-diff
  6. 链家大数据多维分析引擎实践
  7. mysql jdbc linux,linux mysql jdbc 权限问题_MySQL
  8. Spring事务管理,使用@Transactional注解
  9. 《鸟哥的Linux私房菜》简评
  10. Keras:我的第一个神经网络二分类模型
  11. 如何用excel数据分析计算相关系数
  12. Could NOT find Vulkan (missing: Vulkan_LIBRARY Vulkan_INCLUDE_DIR) | 解压安装
  13. linux如何更改mac地址
  14. idea2021 乱码问题
  15. 《惊奇队长》全球IMAX影院劲收3610万美元
  16. android培训课程!不同层级的Android开发者的不同行为,成功入职阿里
  17. 2021西部云安全峰会召开:“云安全优才计划”发布,腾讯云安全攻防矩阵亮相
  18. 正念的奇迹 - 喧嚣的世界中获取安宁
  19. 怎样将css导入html文件中,css样式怎么导入?
  20. [CDH]企业数据仓库数据管理平台CDH6.2.1离线安装记录

热门文章

  1. mysql(数据库)初级操作
  2. 计算机打开查看方式默认是什么样,如何更改win10系统电脑图片的查看方式 怎么将电脑图片查看方式改成缩略图...
  3. 判断空间四点(多点)共面的计算方法
  4. 机器视觉_相机开发(二)——大恒相机
  5. 人工客服真的是真人吗?
  6. 伪元素学习包含::before、::after的用法
  7. 小程序完整demo推荐:东航旅行;预订酒店,机票(适用1221)
  8. 2021-05-12 MongoDB面试题 “ObjectID“有哪些部分组成
  9. 【C语言】一文带你简单了解C语言
  10. java定时执行bat_windows定时器配置执行java jar文件的方法详解