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相关推荐

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

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

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

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

  3. 计算机信息技术会考操作题,信息技术会考操作题整理.doc

    信息技术会考操作题整理 2009.3截屏操作题整理 单向选择题 2)小明用图像处理软件将自己一张照片的背景换成了蓝天白云,这一操作属于 A.加工信息B.发布信息C.管理信息D.获取信息 4)下图中有很 ...

  4. 计算机操作系统pv实验,计算机操作系统PV操作例题.doc

    计算机操作系统PV操作例题 问题1 一个司机与售票员的例子 在公共汽车上,为保证乘客的安全,司机和售票员应协调工作: 停车后才能开门,关车门后才能行车.用PV操作来实现他们之间的协调. S1:是否允许 ...

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

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

  6. 操作系统——PV操作

    PV操作概念:操作系统中的一种同步机制,实现对于并发进程中临界区的管理. 并发进程分为两种: ①无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作. ②有交互的并发进程:多个进 ...

  7. 操作系统PV操作的几个例子

    操作系统中PV操作的几个例子 题1:面包师有很多面包,由n个销售人员推销.每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲下来时,就叫下一个号.试设计一个使销售人员和顾客同步的算法. 思路:顾 ...

  8. 难懂的操作系统--PV操作

    PV操作概念:操作系统中的一种同步机制,实现对于并发进程中临界区的管理. 并发进程分为两种: ①无交互的并发进程:每个进程是相互独立的,谁也不影响谁,基本不会用到PV操作. ②有交互的并发进程:多个进 ...

  9. 操作系统中pv操作用c语言,操作系统-pv操作.doc

    <现代操作系统>课程设计 第 PAGE 5 页 共 NUMPAGES 20 页 课程设计报告(论文) 报告(论文)题目: PV操作解决生产者-消费者问题 作者所在系部: 计算机科学与工程系 ...

  10. 操作系统 | PV操作练习题汇总(一)

    前言 这篇文章中整理了一些我们上课时老师给我们布置的一些PV操作的练习题,希望对大家有用处! 信号量有整型信号量(int)和记录型信号量(Semaphore)等,但是我们老师不是对这个很区分,所以这里 ...

最新文章

  1. 程序员下班不关电脑? | 每日趣闻
  2. 插入排序-by-Python
  3. C 语言判断大端小端
  4. Unity手游开发札记——移动平台的天气系统实现
  5. 微信小程序+微信公众号开发总结
  6. CSS的继承、权值与层叠
  7. ABP vnext模块化架构的最佳实践的实现
  8. Redis 常用配置参数
  9. Clickhouse:分区和数值化优化实测
  10. l455在线清零服务器,爱普生epson l455清零软件官方版
  11. 数字电视机顶盒的基本知识介绍
  12. Impdp Terminates With Error ORA-39126, LPX-00225
  13. 在Ubuntu安装Deepin软件
  14. 芯片行业常用的英文术语及其含义
  15. 有史以来影响世界的颠覆性技术 | 未来的高附加值颠覆性技术产业
  16. 【4.10 博弈论详解】
  17. 《黑客帝国》中的代码雨让人身临其境 利用Python轻松实现
  18. Chrome浏览器无法开启声音,并且音量合成器中没有选项
  19. 上交2017计算机专业就业,2017年大学专业就业率排行榜 看看有没有你喜欢的专业...
  20. 如何打造一篇优秀的简历

热门文章

  1. IT人 不要一辈子靠技术生存(转
  2. 5.4Irvine32库
  3. Kafka 0.10.1.1 特点
  4. 一致性hash算法的应用研究学习
  5. alternate rows shading using conditional formatting
  6. c# 利用t4模板,自动生成Model类
  7. 5月30日任务 访问日志不记录静态文件、访问日志切割、静态元素过期时间
  8. 关于testNG和JUnit的对比
  9. php论坛学习的一个遍历的问题(学习)
  10. 谁能再一次接受“南京大×××”不存在?