如果程序可以在执行过程中被中断,然后在之前的调用完成执行之前再次安全地调用(“重新进入”),则该程序被称为可重入的。中断可能是由内部操作(例如跳转或调用)引起的,也可能是由外部操作(例如中断或信号)引起的。一旦重新输入的调用完成,先前的调用将恢复正确执行。
以下哪个程序不是可重入的?
(一种)
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);
}
(二)
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)这些都没有。答案: (C)
说明:无法重入的 swap()函数的选项 (C) 中给出的代码。
这个问题的测验