爱问知识人 爱问教育 医院库

操作系统算法问题

首页

操作系统算法问题

若一只盘子一次只能放一个水果~!A只往盘中放苹果~B只往盘中放梨子~C只从盘中取苹果~D只从盘中取梨子~试用P,V操作写出同步算法

提交回答
好评回答
  • 2008-10-24 11:23:12
      下面给你伪代码:
    semaphore s;//设置一个信号量s,s的格式为s[r]
               //s[r]=0,0为盘子为空,且AB都没有过操作
               //s[r]=A,1则盘子中A前一次放入过苹果,s[r]=B,1
    //则盘子中前一次B放入过犁,s[r]=A,0则表示盘子为空,可以放入
    //犁,s[r]=B,0则表示盘子为空,可以放入苹果
    //当一个进程执行完后,在后面的3个周期里不得再执行本进程
    Process A
    begin
       if(s[r]==0,0||s[r]==B,0)//当判断盘子为空或者可以放入苹
    //果 
       P(s);
       放入苹果;
       V(s);//s[r]=A,1
    end
    Porcess B
    begin
       if(s[r]==A,0) 
       P(s);
       放入犁;
       V(s);//s[r]=B,1
    end
    Porcess C
    begin
       if(s[r]==A,1) 
       P(s);
       取出苹果;
       V(s);//s[r]=A,0
    end  
    Porcess C
    begin
       if(s[r]==B,1) 
       P(s);
       取出犁;
       V(s);//s[r]=B,0
    end  
    其中我设置了一个规则,先放苹果才可以放犁,防完了其中一项必须放另一项,防止饥饿情况发生。
       可能更好的算法是先放入苹果然后是放入苹果,然后设置一个周期,如果放入苹果的数量到达某一个值时,让B可以放入犁,同理当放入的犁的数量达到某一个值时让A放入苹果,用取余的算法就可以做到,很简单的,。

    喜***

    2008-10-24 11:23:12

类似问题

换一换
  • 操作系统/系统故障 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):