PUERTA | PUERTA CS 2021 | Juego 2 | Pregunta 52

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *