操作系统3并发.pptVIP

  1. 1、本文档共97页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统3并发.ppt

TechEd 2002 第三章 并发控制--同步和互斥 一、顺序程序设计 二、并发程序设计 三、程序并发性的表示 一、并发程序间的制约关系 二、进程互斥的解决 一、信号量 二、P-V操作 理发师问题之参考解法 引入3个信号量和一个控制变量: 1)信号量customers用来记录等候理发的顾客数,并用作阻塞理发师进程,初值为0; 2)信号量barbers用来记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0; 3)信号量mutex用于互斥,初值为1. 4)控制变量waiting用来记录等候理发的顾客数,初值为0; int waiting; //等候理发的顾客数 const int CHAIRS //为顾客准备的椅子数 semaphore customers,barbers,mutex; customers= 0; barbers= 0; waiting= 0; mutex= 1; 理发师进程: P(customers); //若无顾客,理发师睡眠 P(mutex); //进程互斥 waiting --; //等候顾客数少一个 cut-hair( ); //正在理发 V(barbers); //唤醒等待顾客 V(mutex); //开放临界区 顾客进程: P(mutex); //进程互斥 if waitingCHAIRS //看看有没有空椅子 { waiting ++; // 等候顾客数加1 V(customers); //必要的话唤醒理发师 V(mutex); //开放临界区 P(barbers); //无理发师, 顾客坐着养神 get-haircut( ); //一个顾客坐下理发 } else V(mutex); //人满了,走吧! 写者优先之参考解法一: 不让写者饥饿 写者优先之参考解法二: 不让写者饥饿,而且写者写完优先检查有无其他写者 semaphore ?x=1,y=1,z=1,wsem=1,rsem=1;? int?readcount?=?0, writecount=0; 读者进程: ??????????????P(z);? ??????????????P(rsem); P(x); ?????????????? readcount++; ??????????????If?(readcount?==?1)?P(wsem);?//有读者进入,互斥写操作 ??????????????V(x); ??????????????V(rsem);?//?及时释放读写互斥信号量,允许其它读、写进程申请资源 V(z); ????????????? ?读数据; ??????????????P(x); ??????????????readcount--; ??????????????If?(readcount?==?0)?V(wsem);?//所有读者退出,允许写更新 ??????????????V(x); ???????? 写者进程: P(y); writecount++; ???????if(writecount==1) P(rsem);??//?互斥后续其它读者 V(y); ?????P(wsem);??//如有读者正在读或写者在写,等待完成 ?写数据; ?V(wsem);???//允许后续新写者或新第一个读者 P(y); writecount--; if(writecount==0) V(rsem); //允许后续新读者 V(y); ?????????????? ??????? 写者进程: P(rsem);? ?//?互斥后续其它读者、写者 P(wsem);??//如有读者正在读,等待所有读者读完 ?写数据; ?V(wsem);???//允许后续新写者或新第一个读者 V(rsem); //允许后续新读者或写者 ?????????????? ??????? §3.4 经典进程同步问题 一、《生产者-消费者问题》 放产品 取产品 1个生产者与1个消费者,共享1个单缓冲 1.简单《生产者-消费者问题》 单缓冲 Buffe

文档评论(0)

peace0308 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档