兄弟俩共同使用一个账号,每次限存或取10元,存钱与取钱的进程分别如下所示: int amount=0: sAVE(){ TAKE(){ int m1; int m2; m1=

admin2019-08-15  44

问题 兄弟俩共同使用一个账号,每次限存或取10元,存钱与取钱的进程分别如下所示:
    int amount=0:
    sAVE(){              TAKE(){
    int m1;             int m2;
    m1=amount:          m2=amount;
                         m2=m2一10:
                         amount=m2;
                          }
    m1=ml+10:
    amount=m1:
  }
    由于兄弟俩可能同时存钱和取钱,因此两个进程是并发的。若哥哥先存了两次钱,但在第三次存钱时弟弟在取钱。请问:
最后账号amount上面可能出现的值是多少,7

选项

答案 本题考查P、V操作实现进程的互斥。 哥哥存两次钱后,共享变量amount的值为20。哥哥的第三次存钱与弟弟的取钱同时进行,如果两者顺序执行,则最后amount的值为20;如果在一个进程的执行过程中进行CPU调度,转去执行另一进程,则最后amount的值取决于amount=ml及amount=m2的执行先后次序,若前者先执行,则最后amount的值为10,若后者先执行,则最后amount的值为30。因此,最后账号amount上可能出现的值有10、20、30。

解析
转载请注明原文地址:https://kaotiyun.com/show/8iCi777K
0

最新回复(0)