第6章进程间的制约关系(阅读).pptVIP

  • 16
  • 0
  • 约9.53千字
  • 约 64页
  • 2017-01-01 发布于重庆
  • 举报
本章学习目标 三、 实现临界区互斥的TS指令法 互斥算法(TS指令) 利用TS实现进程互斥:每个临界资源设置一个公共布尔变量lock,初值为FALSE 经典的同步/互斥问题 1.生产者与消费者问题 2.读者与写者问题 1.生产者与消费者问题 Dijkstra把广义同步问题抽象成一种“生产者与消费者问题”(Producer-consumer-relationship)的抽象模型。事实上,计算机系统中的许多问题都可归结为生产者与消费者问题,生产者与消费者可以通过一个环形缓冲池(见图3.8)联系起来,环形缓冲池由几个大小相等的缓冲块组成,每个缓冲块容纳一个产品。每个生产者可不断地每次往缓冲池中送一个生产产品,而每个消费者则可不断地每次从缓冲池中取出一个产品。 下面给出基于环形缓冲区的生产者与消费者关系的形式描述,设: (1)公用信号量mutex:初值为1,用于实现临界区互斥。 (2)生产者私用信号量empty:初值为n,指示空缓冲块数目。 (3)消费者私用信号量full:初值为0,指示满缓冲块数目。 (4)整型量i和j初值均为0,i指示首空缓冲块序号,j指示首满缓冲块序号。 Var mutex,empty,full:semaphore; i,j:integer;buffer:array [0…n一1] of item; Procedure producer; 生产者进程 begin while true do begin produce a product; P(empty); P(mutex); Buffer (i):=Product; i:=(i+1) mod n; V(mutex); V(full) end end; procedure consumer; 消费者进程 begin While true do begin P(full); P(mutex) goods:=buffer(j); j:=(j+1) mod n; V(mutex); V(empty); Consume a product; end end; begin seminitial ; i:=j:=0; cobegin producer; consumer; coend end 2.读者与写者问题 设某航空公司有2个售票处,它们通过远程终端访问设在公司总部的航空订票系统,并要查询或修改系统中记录所有班机当前订票数的数据库B。设Bi为某班机的当前订票数,P1和P2分别代表2个售票处的售票进程,R1和R2为进程执行时使用的工作寄存器。由于售票进程并发执行,且各自访问数据库B的时间是随机的,故有可能出现下面的访问序列(假定Bi的当前值为x): P1: R1:=Bi; R1:=R1+1 P2: R2=Bi; R2:=R2+1; P1: Bi:=R1; P2:Bi:=R2 读者与写者问题 var mutex, wrt: semaphore; readcount: integer; begin seminit ; readcount:=0 cobegin procedure reader; begin P(mutex); Readcount:=readcount+1; If readcount=1 then P (wrt); V(mutex); Reading is performing; P(mutex); readcount:=readcount-1 if readcount=0 then V(wrt); V (mutex); End ? Procedure writer; Begin P(wrt); writing is performing; V(wrt); End Coend End; 6.3 死锁问题和高级进程通信 6.3.1 死锁产生的原因和必要条件 6.3.2 预防死锁 6.3.3 发现死锁 6.3.4 解除死锁 6.3.5 高级进程通信 6.3.1 死锁产生的原因和必要条件 当某个进程提出申请资源后,使得有关进程在无外力协助下,永远分配不到必需的资源而无法继续运行

文档评论(0)

1亿VIP精品文档

相关文档