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

admin2019-08-15  42

问题 兄弟俩共同使用一个账号,每次限存或取10元,存钱与取钱的进程分别如下所示:
    int amount=0:
    sAVE(){              TAKE(){
    int m1;             int m2;
    m1=amount:          m2=amount;
                         m2=m2一10:
                         amount=m2;
                          }
    m1=ml+10:
    amount=m1:
  }
    由于兄弟俩可能同时存钱和取钱,因此两个进程是并发的。若哥哥先存了两次钱,但在第三次存钱时弟弟在取钱。请问:
如何用P、V操作实现两并发进程的互斥执行?

选项

答案在上述问题中,共享变量amount是一个临界资源,为了实现两并发进程对它的互斥访问,可为它设置一初值为l的互斥信号量mutex,并将上述算法修改为: int amount=0; semaphore mutex=1: //互斥访问amount变量的信号量 cobegin{ process SAVE(){ int ml; P(mutex); ml=amount; m1=ml+10: amount=ml; V(mutex): } process TAKE(){ int m2; P(mutex): m2=amount; m2=m2—10; amount=m2; V(mutex); } }eoend

解析
转载请注明原文地址:https://jikaoti.com/ti/tjGjFFFM
0

相关试题推荐
最新回复(0)