给出两组并发程序的描述
semaphore X1=X2=Y=1
int c1=c2=0;
//f1(i)
P(X1);
if(++c1 ==1 ) P(Y);
V(X1);
CSA;
P(X1);
if(-c1==0) V(Y);
V(X1);
//f2(i)
P(X2);
if(++c2 ==1 ) P(Y);
V(X2);
CSB;
P(X2);
if(-c2==0) V(Y);
V(X2);
试问这两组并发的进程,在CSA和CSB的并发执行情况?会不会出现饿死?并解释之。
CSA和CSB各自都能有多个并发执行
考虑到一种极端情况,如果f1一直有进程存在,那么f2就会发生饥饿
解释:类似交通单向通行,在单方向的入口设置信号量y,不同方向必须互斥进行,为此设置信号量x1和x2。若某方向需要通过时,首先要将该方向的操作数c1或c2增加1,并查看自己是否是第一个,若是,则获取单方向的信号量y,进入临界区。出临界区后,将该方向的操作数c1或c2减1,并察看自己是否是最后一个,若是,则释放互斥量y,否则,保留信号量y,继续下列的操作。