问题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);

题目要求:

n理发店里有一位理发师、一把理发椅和n把供等候理发的顾客休息的椅子;如果没有顾客,理发师便在理发椅上睡觉,当有顾客到来时,他唤醒理发师;如果理发师正在理发时又有新的顾客来到,那么如果还有空椅子,顾客就坐下来等待,否则就离开理发店。
步骤一:
barber:如果有顾客就理发,没有顾客就不理发。临界条件是有没有顾客,因此定义顾客数cnt = 0;
custermer:如果有空位置就坐在空位置,如果没有空位置就走开,不存在等空位置的状态,因此只存在判断语句,没有临界值。
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);
}
问题2:
/*对于每个custemer来说,整个程序应该是一个互相通信的过程,custermer -> barber -> custermer完成。理发完之后custermer才可以杀死进程,而不可以申请完立即杀死进程。所以存在一个等待barber 的通信变量。*/
对于这个问题,我们先看一下p操作和v操作的工作原理。
p(k)操作:如果 k > 1,那么就索要操作成功,如果k < 1,那么索要操作失败,同时把k的值减小1,把该进程挂在到k的wait队列中去。
v(k)操作:释放k所代表的一个资源,如果k < 0,(假设k = -m,那么m就代表等待队列中的进程个数)那么同时取出wait等待队列中的一个进程继续进行。
简而言之,p操作是申请资源,v操作是释放资源。
未完待续。

p,v操作例题解析--读者-写者问题--誊抄问题——睡眠理发师问题相关推荐

  1. 用P、V操作解决进程同步问题的解题步骤

    蓝颜色是格外注意的 还有读读共享,读写互斥问题. 要背会四个模式,套用模式 例题讲解 1)生产者-消费者问题 一般意义的"生产者-消费者"问题:N个buffer,多个生产者,多个消 ...

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

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

  3. 同步机制—读者写者问题

    [实验目的] 理解临界区和进程互斥的概念,掌握用信号量和PV操作实现进程互斥的方法. [实验内容] 在windows或者linux环境下编写一个控制台应用程序,该程序运行时能创建N个线程,其中既有读者 ...

  4. 操作系统中读者——写者问题的分析

    操作系统中读者--写者问题的分析 Analysis of readerwriter problem in operating system 摘要:本篇文章就操作系统中读者--写者问题进行利用记录型信号 ...

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

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

  6. PV操作详解(附详细例题解析和总结)

    PV操作详解 写在前面:本文主要讲解PV操作与信息量结合,实现进程的同步与互斥 文章目录 PV操作详解 1. PV操作定义 2. 信号量的应用 3. 经典问题分析 3.1 课上例题 3.2 课下习题分 ...

  7. 操作系统 | PV操作七大经典问题 生产者消费者 读者写者 哲学家进餐 理发师理发睡觉 和尚打水 吸烟者 吃水果

    一.生产者消费者问题 生产者消费者问题(英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案 ...

  8. 利用PV操作实现读者-写者问题(读者优先、写者优先)

    .读者优先 1.写者.读者互斥访问文件资源. 2.多个读者可以同时访问文件资源. 3.只允许一个写者访问文件资源. .算法 Program reders writers; Var r_w_w:sema ...

  9. 【操作系统-进程】PV操作——读者写者问题

    文章目录 读者写者问题万能模板 万能模板 1--读进程优先 万能模板 2--读写公平法 万能模板 3--写进程优先 题目 1:南北过桥问题 题目 2:录像厅问题 题目 3:更衣问题 读者写者问题万能模 ...

最新文章

  1. 第四章 Lync server 2010的安装
  2. 深刻剖析与实战BCELoss详解(主)和BCEWithLogitsLoss(次)以及与普通CrossEntropyLoss的区别(次)
  3. windows下定期清理超过一定时间的文件
  4. 小鹏,该兑现PPT了
  5. BI工具升级动态增量新功能,让大数据量入集市更便捷
  6. ADO.NET之使用SqlConnection链接数据库
  7. win7与linux共享文件夹共享,Ubuntu+Win7+Samba实现文件共享
  8. 配置Exchange 2010邮箱和邮件大小限制
  9. 通过Ajax的方式执行GP服务
  10. maven打包所有依赖
  11. http 502错误
  12. HTML5期末大作业:在线电影网站设计——我不是药神电影介绍(4页) HTML+CSS+JavaScript 大二实训大作业HTML源码
  13. lisp语言怎么获取简码_Lisp语言到底神奇在哪里?
  14. 数据湖和数据仓库区别介绍
  15. 20个高级java开发面试题(带答案)
  16. 23届应届毕业生秋招分享——秋招经验
  17. b500k电位器引脚接法_电位器的种类、作用及其引脚的接法
  18. 可在线查看并附源码下载!基于SSM(spring springMVC mybatis mysql)框架的hrm人事管理系统
  19. 多域名指向同一个网站
  20. 机器人二弟_“可佳二代”机器人好性感

热门文章

  1. 中国工程院院士李国杰:未来网络并不遥远
  2. Office(Excel、Word)二次开发——VSTO
  3. 关于VS无法下载扩展的解决办法
  4. shoebox_Shoebox-我的虚拟手绘,手工编码现场乐队
  5. csdn ubb 炮炮兵表情自定义插件
  6. java狗具有特别的接飞盘的方法_训练狗接飞盘,5个方法让你快速见成效!
  7. 小米9搭载 Android,小米9开箱:新一代安卓机皇,硬件配置不输苹果xsmax
  8. 实验观察UE中HDA资源与HDA源文件的关系
  9. 安卓便签的增删改查_手机生日提醒软件哪个好?日历便签提醒软件
  10. J9数字论:关于DAO 特点的宏观分析