经典PV操作问题详解
《经典PV操作问题详解》由会员分享,可在线阅读,更多相关《经典PV操作问题详解(4页珍藏版)》请在装配图网上搜索。
1、经典PV操作问题详解 - 经典P、V操作问题详解 lionxcatgmail 一、根本概念 1. 信号量 struct semaphore int value; / 仅且必须附初值一次,初值非负 PCBtype* wait_queue; / 在此信号量上阻塞的进程队列 S; / 信号量实例为S 2. P、V操作 P(S) V(S) S := S+1; if (S0) 从S等待队列头释放一进程就绪在就绪队列尾; S := S-1; if (S=0; j-) P(Sj); DO_JOB_IN_CRITICAL_SECTION; for(j=0;j=n-2;j+) V(Sj); 二、经典进程同步问题
2、 总述:进程同步问题主要分为以下几类:一消费者消费者问题;二读者写者问题;三哲学家就餐问题;四爱睡觉的理发师问题;五音乐爱好者问题;六船闸问题;七红黑客问题等。其中前两类都是用于处理进程之间通信的问题:消费者消费者问题主要实现进程的消息机制,而读者写者问题用于实现管道通信。哲学家就餐问题是经典的互斥转同步防止死锁的多资争夺。理发师问题合适I/O或外部设备的管理,如打印调度。红黑客问题是解决不同条件触发事件的思想方法。 I. 消费者消费者问题(初始缓冲区为空) 问题:消费者消费产品放到缓冲区,消费者从缓冲区取产品消费。 单缓冲区书P119(合适单或多消费消费者): 同步:消费者不能往满缓冲区放产
3、品(S1(1);消费者不能从空缓冲区取产品(S2(0)。 void Producer while (true) 消费一个产品; P(S1); 放到缓冲区; V(S2); void Consumer while (true) P(S2); 从缓冲区取一个产品; V(S1); 消费产品; 环行多缓冲区或无穷缓冲区单消费消费者习题P173-13: 同步:消费者不能往满缓冲区放产品(S1(n);消费者不能从空缓冲区取产品(S2(0)。n为缓冲区大小。 互斥:设置指示下一个空缓冲区的位置变量(i(0)和指示下一个产品在缓冲区的位置变量(j(0),由于只有一个消费者和消费者,i和j无须互斥访问。此问题无互
4、斥关系。 void Producer while (true) 消费了一个产品; P(S1); 把产品放入缓冲区; i = (i+1)%n; / 无穷缓冲区无须%n V(S2); void Consumer while (true) P(S2); 取一个产品; j = (j+1)%n; / 无穷缓冲区无须%n V(S1); 消费产品; 环行多缓冲区多消费消费者书P120: 同步:消费者不能往满缓冲区放产品(S1(n);消费者不能从空缓冲区取产品(S2(0)。n为缓冲区大小。 互斥:设置指示下一个空缓冲区的位置变量(i(0),消费者之间互斥(mutex1(1);设置指示下一个产品在缓冲区的位置变
5、量(j(0),消费者之间互斥(mutex2(1)。也可以消费者和消费者之间都互斥(把mutex1和mutex2都换成一个mutex(1)。 void Producer while(true) 消费一个产品; P(S1); P(mutex1); 放到缓冲区; i = (i+1)%n; V(mutex1); V(S2); void Consumer while(true) P(S2); P(mutex2); 从第j个缓冲区取一个产品; j = (j+1)%n; V(mutex2); V(S1); 消费产品; 用进程通信(信箱通信)的方法解决上述问题习题P175-27: 问题:发送进程把缓冲区中的消息挂到接收进程的消息链上。 同步:发送进程发送消息数量不限,无消息时接收进程不能取信息,故设置当前消息数量(m-syn(0)。 问题:发送进程把信息发到信箱中,接收进程随时取信。 第 4 页 共 4 页
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。