PUERTA | Sudo GATE 2020 Mock II (10 de enero de 2019) | Pregunta 54

Un programa se llama reentrante si puede interrumpirse en medio de su ejecución y luego volver a llamarse de manera segura («reingresar») antes de que sus invocaciones anteriores completen la ejecución. La interrupción puede ser causada por una acción interna, como un salto o una llamada, o por una acción externa, como una interrupción o una señal. Una vez que se completa la invocación reingresada, las invocaciones anteriores reanudarán la ejecución correcta.

¿Cuál de los siguientes programas no es reentrante ?
(A)

int t;

void swap(int *x, int *y)
{
    int s;

    s = t; // save global variable
    t = *x;
    *x = *y;

    // hardware interrupt might invoke isr() here!
    *y = t;
    t = s; // restore global variable
}

void isr()
{
    int x = 1, y = 2;
    swap(&x, &y);
}

(B)

void swap(int *x, int *y)
{
    int t = *x;
    *x = *y;

    // hardware interrupt might invoke isr() here!
    *y = t;
}

void isr()
{
    int x = 1, y = 2;
    swap(&x, &y);
}

(C)

int t;

void swap(int *x, int *y)
{
    t = *x;
    *x = *y;

    // hardware interrupt might invoke isr() here!
    *y = t;
}

void isr()
{
    int x = 1, y = 2;
    swap(&x, &y);
}

(D) Ninguno de estos.

Respuesta: (C)
Explicación: Código proporcionado en la opción (C) de una función swap() que no puede volver a entrar.
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 *