PV 操作在同步与互斥问题中的应用 PV 操作是解决同步与互斥问题的重要手段,以下是 PV 操作在同步与互斥问题中的应用。 一、 同步和互斥类 在解决同步与互斥问题时,需要遵循一些规律: 1. 进程同步问题中,管理共享资源常常设两个信号量,而进程互斥问题中仅需设立一个信号量。 2. P、V 操作要成对调用,在进程互斥中是针对同一个信号量进行。而在进程同步问题中,进入临界区前后 P、V 操作是针对不同的信号量的。 3. 至少有一个信号量初值大于等于 1(一般指管理共享资源的信号量),否则进程无法被启动运行。 4. 若有多个(k)共享资源,则某信号量初值可设为 k。 二、 北京大学 1991 年同步与互斥题 本题给出的第一个条件是临界资源的访问控制,可用一个互斥信号量解决该问题。第二个条件可以分解为: -N<A 产品数量-B 产品数量 A 产品数量-B 产品数量<M 也就是说,A 产品的数量不能比 B 产品的数量少 N 个以上,A 产品的数量不能比 B 产品的数量多 M 个以上。 解:在本题中,可以设置两个信号量来控制 A、B 产品的存放数量,sa 表示当前允许 A 产品比 B 产品多入库的数量,即在当前库存量和 B 产品不入库的情况下,还可以允许 sa 个 A 产品入库;sb 表示当前允许 B 产品比 A 产品多入库的数量,即在当前库存量和 A 产品不入库的情况下,还可以允许 sb 个 B 产品入库。初始时,sa 为 M-1,sb 为 N-1。当往库中存放入一个 A 产品时,则允许存入 B 产品的数量也增加 1;当往库中存放入一个 B 产品时,则允许存入 A 产品的数量也增加 1。 三、 北京大学 1994 年同步与互斥题 本题是生产者-消费者问题的一个变形,一组生产者 A1,A2,…An1 和一组消费者 B1,B2,…Bn2 共用 m 个缓冲区,每个缓冲区只要写一次,但需要读 n2 次。因此,可以把这一组缓冲区看成 n2 组缓冲区,每个发送者需要同时写 n2 组缓冲区中相应的 n2 个缓冲区,而每一个接收者只需读它自己对应的那组缓冲区中的对应单元。 解:在本题中,应设置一个信号量 mutex 实现诸进程对缓冲区的互斥访问;两个信号量数组 empty[n2]和 full[n2] 描述 n2 组缓冲区的使用情况。mutex 的初始值为 1;empty 中的元素初值为 m;数组 full 中的元素初值为 0。 其同步关系描述如下: var mutex,empty[n2],full[n2]:semaphore; int i; mutex=1; for(i=0;i<=n2-1;i++) { empty[i]=m; full[i]=0; } main (){ cobegin A1( ); A2( ); ┋ An1 (); B1 (); B2 (); ┋ Bn2(); coend } send ( ) /*发送消息*/ { int i; for (i=0;i<=n2-1;i++) p(empty[i]); p(mutex); 将消息放入缓冲区; V(mutex); for(i=0;i<=n2-1;i++) V(full[i]); } receive ( ) /*接收消息*/ { int i; for (i=0;i<=n2-1;i++) p(full[i]); p(mutex); 将消息从缓冲区读出; V(mutex); for(i=0;i<=n2-1;i++) V(empty[i]); } 以上是 PV 操作在同步与互斥问题中的应用,通过设置信号量和使用 P、V 操作,可以解决同步与互斥问题,确保进程之间的同步和互斥。
剩余24页未读,继续阅读
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- matlab平台的的语音滤波设计.zip
- matlab平台的汉字语音识别.zip
- matlab平台的汉字识别.zip
- matlab平台的的运动行为检测.zip
- matlab平台的火焰识别系统设计.zip
- matlab平台的基于DWT+SVD结合傅里叶变换的数字图像水印水印系统.zip
- matlab平台的火焰烟雾检测.zip
- matlab平台的教室人数统计.zip
- matlab平台的交通道路标识识别.zip
- matlab平台的家居防火识别系统.zip
- matlab平台的考勤系统设计.zip
- matlab平台的口罩检测.zip
- matlab平台的金属表面缺陷分析.zip
- matlab平台的口罩识别设计.zip
- matlab平台的口罩识别.zip
- matlab平台的口罩识别检测.zip