我已经阅读了关于 SO 以及http://en.wikipedia.org/wiki/Reentrancy_(computing)的重入主题的可能主题。
我可能会得到可重入函数的想法。但是当我阅读 wiki 网站上的示例时,我真的很困惑。
第一个例子:
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);
}
正如该站点解释的那样:“它仍然无法重入,如果 isr() 在与已经执行 swap() 的线程相同的上下文中被调用,这将继续导致问题。 ” => 这里可能会发生什么样的问题? 交换结果不正确?还是修改了 t 变量的值?
第二个例子,它改进了第一个例子:
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);
}
这如何改进第一个?这是否意味着变量 t 在 swap() 函数中保持不变?