📜  算法测验| SP竞赛1 |问题10

📅  最后修改于: 2021-07-02 16:04:14             🧑  作者: Mango

这是两个并发进程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)是正确的。这个问题的测验