下载此文档

操作系统实验三.docx


文档分类:IT计算机 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
1. 
引入3个信号量和一个控制变量:
    1)控制变量waiting用来记录等候理发的顾客数,初值均为0; 
    2)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0; 
    3)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0(刚开始时理发师在睡觉,所以理发师这个资源数目为0); 
    4)信号量mutex用于互斥,初值为1. 
    关于p,v操作:
     P操作可以看做是申请一个资源,不管这个资源有没有都将这个资源的数目减1,如果现在资源数目小于0,就阻塞。
     v操作就是释放资源,先将这个资源的数目加1,如果发现这个资源数目小于等于0,就会唤醒在阻塞队列上的一个进程。
     先做一些初始化工作:
cpp] view plain copy
 print?
var waiting : integer; /*等候理发的顾客数*/  
CHAIRS:integer; /*为顾客准备的椅子数*/   
customers, barbers,mutex : semaphore;   
customers := 0; barbers := 0; waiting := 0; mutex := 1;  
     理发师进程:
[cpp] view plain copy
 print?
Procedure barber;   
begin while(TRUE); /*理完一人,还有顾客吗?*/   
P(cutomers); /*若无顾客,理发师睡眠*/   
P(mutex); /*进程互斥*/   
waiting := waiting – 1; /*等候顾客数少一个*/   
V(barbers); /*理发师去为一个顾客理发,如果babaers等于0,则顾客都会阻塞*/   
/*刚开始时babers = 0,表示理发师这个资源为0,所以顾客进程执行至 
P(barbers)时也无法让理发师为其理发,现在理发师醒了,表示理发店里拥有 
理发师这个资源了,所以执行V(barbers)这个操作,将资源数加1,此时会唤醒 
一个在队列上阻塞的顾客*/  
V(mutex); /*开放临界区*/   
cut-hair( ); /*正在理发*/   
end;   
    顾客进程:
[cpp] view plain copy
 print?
procedure custo

操作系统实验三 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数3
  • 收藏数0 收藏
  • 顶次数0
  • 上传人mh900965
  • 文件大小18 KB
  • 时间2017-12-11