回 帖 发 新 帖 刷新版面

主题:求解操作系统的题目!

1 兄弟俩共用一个账户,每次限存或取10元,存取与取钱的进程分别描述如下:
Begin
  amount: integer;
  amount:=0; 
Cobegin
Begin 
 process  SAVE                process TAKE 
  var m1:integer;                var  m2:integer;
 begin                                begin
 m1:=amount;                      m2:=amount;
 m1:=m1+10;            m2:=m2-10;
Amount:=m1;                        amount:=m2;
End;                                    end;  
Coend;
End.
由于兄弟俩可能同时存钱和取钱,因此两个进程是并发的。若哥哥先存两次钱,但第三次存钱时,弟弟在取钱。请分析最后账户amount上可能出现的值?若不发生错误,请用P,V操作进行正确管理。

账户上可能的值是多少.?还有怎么算的过程..?知道的高手请讲解一下...万分感谢了!!!!!!!!!!!!!!!!

回复列表 (共2个回复)

沙发

正确的结果应该是20,但在没有pv操作控制的情况下,则有可能是30、20或10

板凳

添加pv操作也很简单:
Begin
  mutex,amount: integer;
  amount:=0; 
  mutex:=1;
Cobegin
Begin 
 process  SAVE                process TAKE 
  var m1:integer;                var  m2:integer;
 begin                        begin
   [b]P(mutex);                    P(mutex);[/b]
   m1:=amount;                  m2:=amount;
   m1:=m1+10;                   m2:=m2-10;
   amount:=m1;                  amount:=m2;
   [b]V(mutex);                    V(mutex);[/b]
 end;                          end;  
Coend;
End.


我来回复

您尚未登录,请登录后再回复。点此登录或注册