【发布时间】:2016-12-11 02:07:45
【问题描述】:
https://en.wikipedia.org/wiki/Reentrancy_(computing)(截至 2016 年 12 月 9 日)声明以下代码是可重入的,尽管修改了全局变量,因为 swap 保持不变:
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
}
但是,如果swap 在任何其他数量的地方被打断怎么办?根据术语的定义,这个函数是可重入的吗?
顺便说一下,这篇文章在 SO 的其他地方被引用为来源——也许有人应该改进它。
【问题讨论】:
-
那是假的 IMO。
-
如果被中断,任何代码都可能使数据处于不一致状态。在任何情况下,示例都是线程 unsafe 交换。
-
@JonathanLeffler 至少有 3 人认为这篇文章是假的,但我没有因为大声疾呼?
-
维基文章搞砸了。尚不清楚为什么在局部变量也可以提供服务时将全局变量用作瞬态变量。不需要全局数据。我建议您在其他地方寻找有关重入的信息。
-
阿塔男孩!我在途中,因此之前的简短评论。
标签: c multithreading thread-safety reentrancy