下载此文档

复习资料3PV操作.doc


文档分类:IT计算机 | 页数:约7页 举报非法文档有奖
1/7
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/7 下载此文档
文档列表 文档介绍
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生产一个产品nextp;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)无读者、写者,新读者可以读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读者:beginrepeatP(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;第二类:写者优先Wmutex表示"允许写",初值是1。公共变量Rcount表示“正在读”的进程数,初值是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;beginparbegin读者:beginrepeatP(S);P(rmutex);if(Rcount==0)P(wmutex);Rcount=Rcount+1;V(rmutex);V(S);执行read操作;P(rmutex);Rc

复习资料3PV操作 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数7
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wz_198613
  • 文件大小159 KB
  • 时间2019-07-15
最近更新