这是两个并发进程A,B,分别具有相应的代码:
代码A:
while (true) // infinite condition
{
M :____;
printf("%c", b);
printf("%c", b);
N:____;
}
代码B:
while (true) // infinite condition
{
O:____;
printf("%c", a);
printf("%c", a);
P:____;
}
为了获得输出bbaabbaabbaa ,分别在M,N,O,P上的二进制信号量运算应该是什么,并且信号X,Y的初始值必须是什么。 。 。 ?
其中P处于下降状态,V处于向上工作状态。
(A) M = P(Y),N = V(X),O = P(X),P = V(Y); X = 0,Y = 1;
(B) M = P(Y),N = V(X),O = P(X),P = P(Y); X = Y = 1;
(C) M = P(Y),N = V(Y),O = P(X),P = V(X); X = 1,Y = 0;
(D) M = P(Y),N = V(Y),O = P(X),P = V(X); X = Y = 1;答案: (A)
说明:在信号灯中,向上操作始终是成功的操作,但是向下操作并不总是成功的。
在以下并发过程中,操作是:
答:代码
while (true) // infinite condition
{
M :P(Y); // Y become 0 successful down operation.
printf("%c", b);
printf("%c", b);
N:V(X); // X become 1 successful up operation.
}
B代码:
while (true) // infinite condition
{
O:P(X); // X become 0 successful down operation.
printf("%c", a);
printf("%c", a);
P:V(Y); // Ybecome 1 successful up operation.
}
在此,所有操作均成功完成,并且X和Y的初始值分别为0和1。
因此,选项(A)是正确的。这个问题的测验