今有一个文件F供进程共享,现把这些进程分为A、B两组,规定同组的进程可以同时读文件F;但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读文件F。试用P、V操作(记录型信号量)来进行管理。
Semaphore Fmutex=1,Asem=0,Bsem=0;
int c1=c2=0;
Cobegin
Pa(i=1,2,3...){
P(Asem)
c1++;
if(c1==1)P(Fmutex)
V(Asem)
reading F;
P(Asem)
c1--;
if(c1==0)V(Fmutex)
V(Asem)
}
Pb(i=1,2,3...){
P(Bsem)
c2++;
if(c2==1)P(Fmutex)
V(Bsem)
reading F;
P(Bsem)
c2--;
if(c2==0)V(Fmutex)
V(Bsem)
}
coend
请问可以写成这样吗?
Semaphore Fmutex=1,Asem=0,Bsem=0;
int c1=c2=0;
Cobegin
Pa(i=1,2,3...){
P(Asem)
if(c1==0)P(Fmutex)
c1++;
V(Asem)
reading F;
P(Asem)
c1--;
if(c1==0)V(Fmutex)
V(Asem)
}
Pb(i=1,2,3...){
P(Bsem)
if(c2==0)P(Fmutex)
c2++;
V(Bsem)
reading F;
P(Bsem)
c2--;
if(c2==0)V(Fmutex)
V(Bsem)
}
coend