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