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