复习资料3(P、V操作).doc

复习资料3(P、V操作).doc

ID:49654893

大小:159.50 KB

页数:7页

时间:2020-03-03

复习资料3(P、V操作).doc_第1页
复习资料3(P、V操作).doc_第2页
复习资料3(P、V操作).doc_第3页
复习资料3(P、V操作).doc_第4页
复习资料3(P、V操作).doc_第5页
资源描述:

《复习资料3(P、V操作).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、P、V一、生产者--消费者问题(采用信号量机制)full是"满"数目,初值为0,empty是"空"数目,初值为N。实际上,full+empty==N;mutex用于访问缓冲区时的互斥,初值是1;每个进程中各个P操作的次序是重要的:先检查资源数目,再检查是否互斥――否则可能死锁;Varmutex,empty,full:semaphore:=1,n,0;buffer:array[0,.....n-1];in,out:integer:=0,0;beginparbegin生产者:beginrepeat生产一个产品nex

2、tp;P(empty);P(mutex);将产品输入到buffer中buffer[in]:=nextp;in=(in+1)modn;V(mutex);V(full);untilfalse;end;消费者:beginrepeatP(full);P(mutex);从buffer中取一个产品nextc=buffer[out];out:=(out+1)modn;V(mutex);V(empty);untilfalse;end;parend;end;三、读者--写着问题(采用信号量机制)第一类:读者优先如果读者来:1)无

3、读者、写者,新读者可以读2)有写者等,但有其它读者正在读,则新读者也可以读3)有写者写,新读者等如果写者来:1)无读者,新写者可以写2)有读者,新写者等待3)有其它写者,新写者等待Wmutex表示"允许写",初值是1。公共变量Rcount表示“正在读”的进程数,初值是0;Rmutex表示对Rcount的互斥操作,初值是1。Varwmutex,rmutex:semaphore=1,1;buffer:array[0,.....n-1];Rcount:integer:=0;beginparbegin读者:beginr

4、epeatP(rmutex);if(Rcount==0)P(wmutex);Rcount=Rcount+1;V(rmutex);执行read操作;P(rmutex);Rcount=Rcount-1;if(Rcount==0)V(wmutex);V(rmutex);untilfalse;end;写者:beginrepeatP(wmutex);进行write操作;V(wmutex);untilfalse;end;parend;end;第二类:写者优先7Wmutex表示"允许写",初值是1。公共变量Rcount表示“

5、正在读”的进程数,初值是0;Rmutex表示对Rcount的互斥操作,初值是1。“为了使写者优先,可在原来读者优先的基础上增加一个初值为1的信号量S,使得至少有一个写者准备访问共享对象时,他可以使后续的读者进程等待写完成。初值为0的Wcount用来对写者进行计数,初值为1的互斥信号量mutex用来实现多个写者对Wcount的互斥访问”。VarS,wmutex,rmutexmutex:semaphore=1,1,1,1;buffer:array[0,.....n-1];Rcount:integer:=0;begi

6、nparbegin读者:beginrepeatP(S);P(rmutex);if(Rcount==0)P(wmutex);Rcount=Rcount+1;V(rmutex);V(S);执行read操作;P(rmutex);Rcount=Rcount-1;if(Rcount==0)V(wmutex);V(rmutex);untilfalse;end;写者:beginrepeatP(mutex);if(Wcount==0)P(S);Wcount=Wcount+1;V(mutex);P(wmutex);进行write

7、操作;V(wmutex);P(mutex);Wcount=Wcount-1;if(Wcount==0)V(S);V(mutex);untilfalse;end;parend;end;二、哲学家进餐问题Varsm:semaphore:=4;Philosopheri:while(true){P(sm);P(chopStick[i]);//getleftchopstickP(chopStick[(i+1)%5]);//getrightchopstick......eat;......V(chopStick[i]);/

8、/returnleftchopstickV(chopStick[(i+1)%5]);//returnrightchopstickV(sm);......think;......}7老和尚喝水问题:某寺庙,有小、老和尚若干,由小和尚提水入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井窄,每次只能容一个桶取水。水桶总数为3个。每次入、取缸水仅为1桶,且不可同时进行。试给出有关取水、

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。