Considere el siguiente segmento de código de subprocesos múltiples (en una combinación de C y pseudocódigo), invocado por dos procesos P1 y P2, y cada uno de los procesos genera dos subprocesos T1 y T2:
int x = 0; // global Lock L1; // global main () { create a thread to execute foo( ); // Thread T1 create a thread to execute foo( ); // Thread T2 wait for the two threads to finish execution; print(x);} foo() { int y = 0; Acquire L1; x = x + 1; y = y + 1; Release L1; print (y);}
¿Cuál(es) de las siguientes afirmaciones es(n) correcta(s)?
(A) Tanto P1 como P2 imprimirán el valor de x como 2.
(B) Al menos de P1 y P2 imprimirán el valor de x como 4.
(C) Al menos uno de los subprocesos imprimirá el valor de y como 2.
(D) Tanto T1 como T2, en ambos procesos, imprimirán el valor de y como 1.
Respuesta: (A) (D)
Explicación: (1) Falso, no es necesario que sea cierto siempre.
(2) Verdadero, Orden de ejecución: P1->T1->T2; P2->T1->T2; P1-impresión(x), P2-impresión(x) | la salida es 4,4
(3) Falso, los subprocesos mantienen su propia copia de la pila y las variables locales (y) se almacenan en la pila.
(4) Cierto, y=y+1 puede tratarse como una sección crítica, y está bien sincronizado con Adquirir L1 y Liberar L1
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