Operating System-work4

给出两组并发程序的描述
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,继续下列的操作。

发布了42 篇原创文章 · 获赞 5 · 访问量 2686

猜你喜欢

转载自blog.csdn.net/weixin_44198992/article/details/105204562