PUERTA | PUERTA-CS-2006 | Pregunta 79

Barrier es una construcción de sincronización en la que un conjunto de procesos se sincroniza globalmente, es decir, cada proceso del conjunto llega a la barrera y espera a que lleguen todos los demás y luego todos los procesos abandonan la barrera. Sea tres el número de procesos en el conjunto y sea S un semáforo binario con las funciones habituales P y V. Considere la siguiente implementación en C de una barrera con los números de línea que se muestran a la izquierda.

void barrier (void) {
1:   P(S);
2:   process_arrived++;
3.   V(S);
4:   while (process_arrived !=3);
5:   P(S);
6:   process_left++;
7:   if (process_left==3) {
8:      process_arrived = 0;
9:      process_left = 0;
10:  }
11:  V(S);
}

Las variables process_arrived y process_left se comparten entre todos los procesos y se inicializan a cero. En un programa concurrente, los tres procesos llaman a la función de barrera cuando necesitan sincronizarse globalmente.

¿Cuál de los siguientes soluciona el problema en la implementación?
(A) Las líneas 6 a 10 simplemente se reemplazan por process_arrived–
(B) Al comienzo de la barrera, el primer proceso que ingresa a la barrera espera
hasta que process_arrived se vuelve cero antes de proceder a ejecutar P(S).
(C) El cambio de contexto se desactiva al principio de la barrera y se vuelve a activar al final.
(D) La variable process_left se hace privada en lugar de compartida

. Respuesta: (B)
Explicación:
el paso ‘2’ no debe ejecutarse cuando el proceso ingresa a la barrera por segunda vez hasta que otros dos procesos no hayan completado su séptimo paso. Esto es para evitar que la variable process_arrived sea mayor que 3.

Entonces, cuando la variable process_arrived se vuelve cero y la variable process_left también se vuelve cero, entonces se resolverá el problema del interbloqueo.

Por lo tanto, al comienzo de la barrera, el primer proceso que ingresa a la barrera espera hasta que process_arrived se vuelve cero antes de proceder a ejecutar P(S).

 
Por lo tanto, la opción (B) es correcta.

 
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 *