p,v操作例题解析--读者-写者问题--誊抄问题——睡眠理发师问题
问题1:读者写者问题
层次1:只有读者,最多允许有k个读者,用p,v操作写出程序。
int main()
{int rspace = k;cobeginread_1();read_2();……read_n();coend
}read_i()
{p(rspace);……v(rspace);
}
这个操作,需要设置信号灯rspace来控制是否达到了k个人数,当达到k个人数的时候rspace == 0,这个时候需要挂起。
层次2:一个读者,一个写者问题。
int main()
{int mutex = 1;cobeginread_i();write_i();coend
}read_i()//i = 1, 2, ……
{p(mutex);……v(mutex);
}write()//i = 1, 2, ……
{p(mutex);……v(mutex);
}
这是一个临界资源,对于临界资源,需要设置信号灯mutex控制只有一个进程可以访问。
层次3:有多名读者,有多名写者。
int main()
{int mutex = 1;//这个是读和写的互斥int mutex1 = 1;//这个是保护cnt等变量cobeginread_i();write_i();coend
}read_i()//i = 1, 2, ……
{p(mutex1);cnt ++;if(cnt == 1){p(mutex);}v(mutex1);……p(mutex1);cnt --;if(cnt == 0){v(mutex);}v(mutex1);
}write()//i = 1, 2, ……
{p(mutex);……v(mutex);
}
这个资源,mutex把读和写的互斥,用mutex1把cnt临界资源保护起来。//问题:那么mutex本身不需要保护吗?怎么保证不会同时去修改mutex的值?
层次4:有多名读者,至多k名读者,有多名写者。
int main()
{int mutex = 1;//这个是读和写的互斥int mutex1 = 1;//这个是保护cnt等变量int cnt = 0;int rspace = k;cobeginread_i();write_i();coend
}read_i()//i = 1, 2, ……
{p(mutex1);p(rspace);cnt ++;if(cnt == 1){p(mutex);}v(mutex1);……p(mutex1);cnt --;if(cnt == 0){v(mutex);}v(rspace);v(mutex1);
}write()//i = 1, 2, ……
{p(mutex);……v(mutex);
}
这个需要rspace = k这个来保证,也就是说当临界值的时候,就是rspace = 0 的时候就是临界值。
问题2:誊抄问题
问题由来:
由于打印机,和卡带机(以前的输入设备)的输入比较慢,如果一个输入一个输出速度比较慢,所以设立了两个缓冲区,可以讲时间缩短。
设原来时间:输入一个字符T1,打印一个字符T2,那么一个字符从输入到输出总共时间T1 + T2,优化后时间是max(T1 + T2);
//输入f,输出g
int main()
{get(s, t);while(誊抄未完){t = s;cobeginget(s, f);put(t, g);coend}
}
这个题目的关键在于:
1. 首先要get(s, t)保证一开始的时候s缓冲区中有需要被使用的内容,t缓冲区中的内容不被使用。
2. t = s是一个赋值操作,速度极快,忽略不计,因此时间取决于max(T1 + T2);
题目要求:
int main()
{int cnt = 0;//顾客的个数cobeginbarber();customer();coend
}barber()
{while(1){p(cnt);……}
}customer_i()//1,2,……
{if(cnt < n + 1) v(cnt);
}
问题:这个时候的cnt是存在于customer 和 barber共同之中的,因此可能出现custermer 和 barber 共同改变 cnt的情况,所以说需要设置一个变量mutex保护cnt这个变量的互斥操作。
int main()
{int cnt = 0;//顾客的个数int mutex = 0;cobeginbarber();customer();coend
}barber()
{while(1){p(mutex);p(cnt);v(mutex);……}
}customer_i()//1,2,……
{p(mutex);if(cnt < n + 1) v(cnt);v(mutex);
}
p,v操作例题解析--读者-写者问题--誊抄问题——睡眠理发师问题相关推荐
- 用P、V操作解决进程同步问题的解题步骤
蓝颜色是格外注意的 还有读读共享,读写互斥问题. 要背会四个模式,套用模式 例题讲解 1)生产者-消费者问题 一般意义的"生产者-消费者"问题:N个buffer,多个生产者,多个消 ...
- 操作系统信号量与P、V操作 初步认识整理
初步接触,若有不足之处,请各位不吝赐教.谢谢! 首先介绍:信号量 信号量包括整型信号量.结构型信号量.二值信号量. ① 整型信号量 最初,将信号量定义为一个共享的整型量,它保存可供使用的唤醒数目.如果 ...
- 同步机制—读者写者问题
[实验目的] 理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法. [实验内容] 在windows或者linux环境下编写一个控制台应用程序,该程序运行时能创建N个线程,其中既有读者 ...
- 操作系统中读者——写者问题的分析
操作系统中读者--写者问题的分析 Analysis of readerwriter problem in operating system 摘要:本篇文章就操作系统中读者--写者问题进行利用记录型信号 ...
- 一阅览室只能容纳150人,当少于150人时,可以进入,否则,需在外等候,若将每一个读者作为一个进程,请用P、V操作编程(类C、类pascal),并写出信号量的初值。(PV操作伪代码)
1.第一种情况:现实生活中阅览室的门可以同时进入或出去多个人,题目中也没有其他限定时,可以只设立同步信号量即可. 伪代码如下: int n = 150;semaphore empty = n;/*em ...
- PV操作详解(附详细例题解析和总结)
PV操作详解 写在前面:本文主要讲解PV操作与信息量结合,实现进程的同步与互斥 文章目录 PV操作详解 1. PV操作定义 2. 信号量的应用 3. 经典问题分析 3.1 课上例题 3.2 课下习题分 ...
- 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果
一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...
- 利用PV操作实现读者-写者问题(读者优先、写者优先)
.读者优先 1.写者.读者互斥访问文件资源. 2.多个读者可以同时访问文件资源. 3.只允许一个写者访问文件资源. .算法 Program reders writers; Var r_w_w:sema ...
- 【操作系统-进程】PV操作——读者写者问题
文章目录 读者写者问题万能模板 万能模板 1--读进程优先 万能模板 2--读写公平法 万能模板 3--写进程优先 题目 1:南北过桥问题 题目 2:录像厅问题 题目 3:更衣问题 读者写者问题万能模 ...
最新文章
- 第四章 Lync server 2010的安装
- 深刻剖析与实战BCELoss详解(主)和BCEWithLogitsLoss(次)以及与普通CrossEntropyLoss的区别(次)
- windows下定期清理超过一定时间的文件
- 小鹏,该兑现PPT了
- BI工具升级动态增量新功能,让大数据量入集市更便捷
- ADO.NET之使用SqlConnection链接数据库
- win7与linux共享文件夹共享,Ubuntu+Win7+Samba实现文件共享
- 配置Exchange 2010邮箱和邮件大小限制
- 通过Ajax的方式执行GP服务
- maven打包所有依赖
- http 502错误
- HTML5期末大作业:在线电影网站设计——我不是药神电影介绍(4页) HTML+CSS+JavaScript 大二实训大作业HTML源码
- lisp语言怎么获取简码_Lisp语言到底神奇在哪里?
- 数据湖和数据仓库区别介绍
- 20个高级java开发面试题(带答案)
- 23届应届毕业生秋招分享——秋招经验
- b500k电位器引脚接法_电位器的种类、作用及其引脚的接法
- 可在线查看并附源码下载!基于SSM(spring springMVC mybatis mysql)框架的hrm人事管理系统
- 多域名指向同一个网站
- 机器人二弟_“可佳二代”机器人好性感