PUERTA | PUERTA-CS-2003 | Pregunta 81

Supongamos que queremos sincronizar dos procesos simultáneos P y Q usando semáforos binarios S y T. El código para los procesos P y Q se muestra a continuación.

Process P:
while (1) {
W:
   print '0';
   print '0';
X:
}
	
Process Q:
while (1) {
Y:
   print '1';
   print '1';
Z:
}

Las declaraciones de sincronización solo se pueden insertar en los puntos W, X, Y y Z

¿Cuál de los siguientes asegurará que la string de salida nunca contenga una substring de la forma 01^n0 o 10^n1 donde n es impar?
(A) P(S) en W, V(S) en X, P(T) en Y, V(T) en Z, S y T inicialmente 1
(B) P(S) en W, V(T) en X, P(T) en Y, V(S) en Z, S y T inicialmente 1
(C) P(S) en W, V(S) en X, P(S) en Y, V(S) en Z, S inicialmente 1
(D) V(S) en W, V(T) en X, P(S) en Y, P(T) en Z, S y T inicialmente 1

Respuesta: (C)
Explicación: P (S) significa espera en el semáforo ‘S’ y V(S) significa señal en el semáforo ‘S’. La definición de estas funciones es:

Wait(S)  {
   while (i <= 0) ;
   S-- ; 
}


Signal(S) { S++ ; }

Inicialmente S = 1 y T = 0 para admitir la exclusión mutua en el proceso ‘P’ y ‘Q’.

Dado que S = 1, se ejecutará el proceso ‘P’ y la función Wait(S) disminuirá el valor de ‘S’. Entonces, S = 0 ahora.

Simultáneamente, en el proceso ‘Q’, T = 0. Por lo tanto, el control en el proceso ‘Q’ se quedará atascado en el ciclo while hasta que el proceso de tiempo ‘P’ imprima ’00’ e incremente el valor de ‘T’ llamando a la función V(T).

Mientras el control está en el proceso ‘Q’, S = 0 y el proceso ‘P’ se quedarán atascados en el bucle while. El proceso ‘P’ no se ejecutará hasta que el proceso ‘Q’ imprima ’11’ y haga S = 1 llamando a la función V(S).

Por lo tanto, el proceso ‘P’ y ‘Q’ se seguirán repitiendo para dar la salida ‘00110011 …… ‘.

Vea la explicación del video de GeeksforGeeks:

 
Comente a continuación si encuentra algo incorrecto en la publicación anterior.
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 *