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 其他地方的来源——也许有人应该改进它。
最佳答案
要回答这个问题,有必要观察到“可重入”是一个具有多种公认含义的重载术语,其中一些含义从“延伸”到“公然不正确”。
我会说该函数是同步(但不是异步)可重入的,当然不是线程安全的。这在这里相当空洞,因为它不调用任何其他函数,但如果它调用一个回调函数,然后可以回调到这个函数,那将是有意义的。
如果正确使用 volatile
类型,该函数可能是异步可重入的(但仍然不是线程安全的)。
关于c - 维基百科关于重入的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41082295/