PV操作之独木桥问题

news/2024/7/8 4:16:32 标签: PV, semaphore, 操作系统

一、东西向汽车过独木桥,为了保证安全,只要桥上无车,则允许一方的汽车过桥,待一方的汽车全部过完后,另一方的汽车才允许过桥。

semaphore wait,mutex1,mutex2;
mutex1=mutex2=1;wait=1; bridge=1;
int counter1,counter2; counter1=0;counter2=0;
semaphore S1,S2;S1=3;S2=0;

process P左() {
while(true) {
       P(mutex1);  
          count1++; 
          if (count1==1) P(wait); 
       V(mutex1);   
          过独木桥;
P(mutex1); 
  count1--;
          if(count1==0) V(wait); 
        V(mutex1); 
    }
} 	
process P右() {
while(true) {
       P(mutex2); 
          count2++; 
          if (count2==1) P(wait); 
       V(mutex2); 
          过独木桥;
P(mutex1); 
         count2--;  
         if(count2==0) V(wait); 
       V(mutex2); 
    }
} <strong>
</strong>

二、在独木桥问题1中,限制桥面上最多可以有k辆汽车通过。

答1: 
semaphore wait,mutex1,mutex2,bridge;
  mutex1=mutex2=1;bridge=k;wait=1;
  int counter1,counter2; counter1=0;counter2=0;
cobegin
process P东( ) {                       process P西( ) {
       P(mutex1);                           P(mutex2);
       count1++;                            count2++;
       if (count1==1)  P(wait);               if (count2==1)  P(wait);
       V(mutex1);                           V(mutex2);
       P(bridge);                            P(bridge);
       {过桥};                               {过桥};    
       V(bridge);                             V(bridge);        
       P(mutex1);                            P(mutex2);
       count1--;                              count2--;           
       if (count1==0)  V(wait);               if (count2==0)  V(wait);
       V(mutex1);                           V(mutex2);
     }                                   }
coend

答2:
cobegin
process P东( ) {                       process P西( ) {
       P(bridge1);                           P(bridge2);
       P(mutex1);                           P(mutex2);
       count1++;                            count2++;
      if (count1==1 )  P(wait);               if (count2==1)  P(wait);
       V(mutex1);                           V(mutex2);
       {过桥};                               {过桥};    
V(bridge1);                           V(bridge2);     
P(mutex1);                            P(mutex2);
count1--;                              count2--;           
if (count1==0) V(wait)                  if (count2==0 ) V(wait);    
V(mutex1);                           V(mutex2);
     }                                    }
coend

三、 在独木桥问题1中,以叁辆汽车为一组,要求保证左方和右方以组为单位交替通过汽车。

semaphore wait,mutex1,mutex2;
mutex1=mutex2=1;wait=1;
int counter1,counter2; counteru1=0; countd1=0; counteru2=0; counterd2=0;
semaphore S1,S2;S1=3;S2=0;

Process P左() {
while(true) {
   P(S1)  
       P(mutex1);  
          countu1 ++; 
          if (countu1==1) & (countd1==0)  P(wait); 
       V(mutex1);   
          过独木桥;
       V(S2)
P(mutex1); 
  countu1--;
  countd1 ++
if ((countu1==0)&(countd1==3) )
{countd1=0; V(wait); }
        V(mutex1); 
    }
} 	
Process P右() {
while(true) {
   P(S2)   
       P(mutex2); 
          countu2++; 
          if (countu2==1) & (countd2==0)  P(wait); 
       V(mutex2); 
          过独木桥;
V(S1)
P(mutex2); 
         countu2--;
 countd2++
if ((countu2==0)&(countd2==3))
{countd2=0; V(wait); }
       V(mutex2); 
    }
} 

左边过桥分为两种典型(不完全):

(1)PL1上桥, PL1下桥, PL2上桥, PL2下桥, PL3上桥, PL3下桥

如果PL1上桥, PL1下桥,countu1会减到0,但是countd1计数还是1,可以避免这时就由左边执行V(wait);PL2上桥, PL2下桥, countu1会减到0,countd1加到2,不执行V(wait);PL2上桥, PL2下桥, countu1会减到0,countd1累计到3,因此只有左边累计有3个下桥之后,才一次性将countd1改为0,并执行V(wait)唤醒右边。

(2)PL1上桥, PL2上桥, PL3上桥, PL1下桥, PL2下桥, PL3下桥

PL1,PL2, PL3依次上桥,此时countu1加到3;然后PL1下桥,countu1减到2,countd1加到1,不执行V(wait);PL2下桥,countu1减到1,countd1加到2,不执行V(wait);PL3下桥,countu1减到0,countd1加到3,执行V(wait) 唤醒右边。


四、 在独木桥问题1中,要求各方向的汽车串行过桥,但当另一方提出过桥时,应能阻止对方未上桥的后继车辆,待桥面上的汽车过完桥后,另一方的汽车开始过桥。

stop用于当另一方提出过桥时,应阻止对方未上桥的后继车辆。

  semaphore stop,wait,mutex1,mutex2;
    stop=mutex1=mutex2=1;wait=1;  
    int counter1,counter2; counter1=0;counter2=0;
cobegin
process P东( ) {                           process P西( ) {
  P(stop);                                P(stop);
       P(mutex1);                             P(mutex2);
       count1++;                              count2++;
     if (count1==1)  P(wait);                  if (count2==1)  P(wait);
V(mutex1);                           V(mutex2);
V(stop);                              V(stop);
{过桥};                              {过桥};    
      P(mutex1);                            P(mutex2);
       Count1--;                              count2--;           
    if (count1==0)  V(wait);                 if (count2==0)  V(wait);
       V(mutex1);                           V(mutex2);
    }                                   }
coend




http://www.niftyadmin.cn/n/1741121.html

相关文章

a标签禁止点击_以案说法!销售无标签的瓶装芝麻油如何定性处理?

提醒近期微信公众号平台调整了推送机制&#xff0c;点击上方 “食药法苑 ” → 点击右上角“...” → 点选“设为星标 ★ ”&#xff0c;以后就能第一时间看到我们的文章啦&#xff01;食药法苑点击关注我&#xff01;各种法规资料尽在法苑....一、案情近日&#xff0c;安徽省…

bios sgx需要开启吗_bios怎么设置uefi启动

uefi启动是一种新的主板引导项&#xff0c;如果在bios下设置uefi&#xff0c;其电脑的运行速度能颠覆你对于开机速度的以往看法&#xff0c;在bios设置uefi也好操作&#xff0c;几个步骤就能够解决。减少了BIOS自检的步骤&#xff0c;加快平台的启动是uefi bios的最大特点&…

iaas paas saas_一文快速搞懂IaaS、PaaS、SaaS 三种云服务模式

企业参考云采购时&#xff0c;通常会考虑三种云服务模式。目前&#xff0c;云计算服务种类主要分为 IaaS(基础架构即服务)、PaaS(平台即服务)、SaaS(软件即服务)三类。每种云模型都提供了自己的特定功能和特性&#xff0c;来适应不同的应用场景和企业。下面来介绍一下三种模型的…

ML CV DM PP

CV会议领先研究室专家代码网址 本文基于http://www.sciencenet.cn/m/Print.aspx?id224651 的结果&#xff0c;增加了自己搜索和国内一些信息。 作机器视觉和图像处理方面的研究工作&#xff0c;最重要的两个问题&#xff1a;其一是要把握住国际上最前沿的内容&#xff1b;其二…

Axure 点图片外区域即隐藏_奔驰V260内饰改装隐藏六座炮筒式仪表盘、后排沙发床、可拆卸小桌板车_搜狐汽车...

本文车型速览除了文章作者的主观观点外&#xff0c;我们正尝试基于全网可查的客观数据&#xff0c;为您提供中立、客观的参考依据&#xff1a;本文部分车型速览&#xff1a;畅销车型质量排行top10展开微信扫码&#xff0c;直接一次看完附近所有城市低价(附近城市均有经销商可售…

win10无限重启_win10系统重置教程

前言:win10正版系统才能操作重置哦,重置分两种情况,第一种是可以进入系统桌面的情况下进行重置,第二种是无法进入系统的情况下启动重置,根据自己实际情况选择重置方式哦(重置大概需要2-4小时,这期间必须保障电源接通,请根据自身情况选择适宜的时间点进行重置操作)1.可以进入系统…

cracking the pm interview_2020泰晤士报THE世界大学排名发布!如何凭艺术冲进大U名校?...

就在今天&#xff0c;2020年THE泰晤士高等教育世界大学排名发布了&#xff01;前两天2020USNews美国大学的排名才刚刚公布&#xff0c;紧接着泰晤士的世界大学排名又来了&#xff01;这是纷纷抢着为同学们提供择校参考的节奏啊&#xff01;THE世界大学排名是四大权威世界大学排…

iar遇到pcode returned with_「KnowYourself」追你的时候很热情,在一起不久就不爱了。因为你遇到了这种人格特质的伴侣……...

KY作者 / 罗勒策划 / Ivan插画 / Always编辑 / KY主创们今天想跟大家讲讲这么一种需要引起警惕的恋爱模式&#xff0c;总结成一句话就是——“追你的时候很热情&#xff0c;可在一起之后很快就不爱你了”。身边有一个朋友经历了这样的感情&#xff0c;被分手后满脑子竟然只有“…