Prueba de algoritmos | SP Concurso 1 | Pregunta 10

Aquí están los dos procesos concurrentes A, B con sus respectivos códigos:

Código A:

while (true) // infinite condition
{
    M :____;
    printf("%c", b);
    printf("%c", b);
    N:____;
}

Código B:

while (true) // infinite condition
{
    O:____;
    printf("%c", a);
    printf("%c", a);
    P:____;
}

¿Cuál debería ser la operación del semáforo binario en M, N, O, P respectivamente y cuáles deben ser los valores iniciales del semáforo X, Y para obtener la salida bbaabbaabbaa? . . ?
Donde P es operación hacia abajo y V hacia arriba respectivamente.

(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;

Respuesta: (A)
Explicación: En el semáforo, arriba siempre es una operación exitosa, pero abajo no siempre lo es.
En el siguiente proceso concurrente Las operaciones son:
A: código

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.
}

código 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.
}

Aquí todas las operaciones tienen éxito con los valores iniciales de X e Y son 0 y 1 respectivamente.
Entonces, la opción (A) es correcta.

Cuestionario de esta pregunta

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *