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 instrucciones de sincronización solo se pueden insertar en los puntos W, X, Y y Z.
¿Cuál de las siguientes siempre conducirá a una salida que comience con ‘001100110011’?
(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 inicialmente 1 y T inicialmente 0
(C) P(S) en W, V(T) en X, P(T) en Y, V (S) en Z, S y T inicialmente 1
(D) P(S) en W, V(S) en X, P(T) en Y, V(T) en Z, S inicialmente 1 y T inicialmente 0
Respuesta: (B)
Explicación: P(S) significa espera en el semáforo ‘S’ y V(S) significa señal en el semáforo ‘S’.
Wait(S) { while (i <= 0) --S; } Signal(S) { S++; }
Inicialmente, asumimos S = 1 y T = 0 para admitir la exclusión mutua en el proceso P y Q.
Dado que S = 1, solo se ejecutará el proceso P y esperar (S) disminuirá el valor de S. Por lo tanto, S = 0.
En el mismo instante, en el proceso Q, el valor de T = 0. Por lo tanto, en el proceso Q, el control permanecerá en el ciclo while hasta que el proceso P imprima 00 e incremente el valor de T llamando a la función V(T).
Mientras el control está en el proceso Q, el semáforo S = 0 y el proceso P estarían atascados en el ciclo while y no se ejecutarían hasta que el proceso Q imprima 11 y haga el valor de S = 1 llamando a la función V(S).
Todo este proceso se repetirá para dar como resultado 00 11 00 11 … .
Por lo tanto, B es la opción correcta.
Vea la explicación del video de GeeksforGeeks:
Comente a continuación si encuentra algo incorrecto en la publicación anterior.
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