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