【操作系统不挂科】<经典同步问题(11)>PV原语简答题(带答案与解析)

前言

大家好吖,欢迎来到 YY 滴操作系统不挂科 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
本博客主要内容,收纳了一部门基本的操作系统题目,供yy应对期中考试复习。大家可以参考

1.对于生产者-消费者问题,若缓冲区中缓冲区单元只有一个,生产者和消费者各只有一人。用P、V原语实现生产者和消费者的同步操作

  • 正确答案:
Semaphore  Vs1=0;
Semaphore  Vs2=0;
Main(){
  Cobegin{
     producer     //生产者进程
     while(true){
        送产品到缓冲区;
        V(Vs1);     //允许取产品
        P(Vs2);     //阻止送产品
     }
     consumer     //消费者进程
     while(true){
        P(Vs1);     //阻止取产品
        从缓冲区取产品;
        V(Vs2);     //允许送产品
     }
  }
  coend
}

在这里插入图片描述

2.对于生产者-消费者问题,若缓冲区中缓冲区的单元有n个,生产者和消费者各只有一个。用P、V原语实现生产者和消费者同步操作

  • 正确答案:
semaphore empty=n;     //初始时空的缓冲区单元个数
semaphore full=0;      //初始时满的缓冲区个数
semaphore mutex=1;     //控制对临界区访问的互斥信号量
main(){
   cobegin{
      procducer       //生产者进程
      while(true){
          P(empty);    //递减一个空缓冲区单元
          P(mutex);    //互斥访问缓冲区
          送一个产品到缓冲区;
          V(mutex);    //允许访问缓冲区
          V(full);     //递增一个满缓冲区单元
      }
      consumer
      while(ture){        //消费者进程
          P(full);     //递减一个满缓冲区
          P(mutex);    //互斥访问临界区
          从缓冲区取一个产品;
          V(mutex);    //允许访问缓冲区
          V(empty);    //递增一个空缓冲区单元
      }
   }
   coend
}

3.有n+1个进程,即A1,…,An和B,如图所示。A1,…,An通过同一缓冲区各自不断地向B发送消息,B不断地获取消息,则开始时缓冲区为空,使用P、V操作正确实现之。

在这里插入图片描述

  • 正确答案:
semaphore Sa=1;
semaphore Sb=0;
main(){
   cobegin{
      进程Ai(i=1,,n)
        while(true){
          P(Sa);       //互斥A发消息
          向缓冲区发送消息;    
          V(Sb);       //允许B取消息
      }
      进程B
      while(true){
          P(Sb);       //互斥B取消息
          从缓冲区取消息;
          V(Sa);       //允许A发消息
      }
   }
   coend
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY的秘密代码小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值