- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有静态常量局部变量的函数,该函数是否可重入?
这是代码:
void foo(unsigned char *pucBuffer,
int iBytes,
unsigned int *puiOUT)
{
static const long rg_uliLUT[4] = {0x00000000, 0x77073096, 0xee0e612c,
0x990951ba};
while(iBytes--)
{
*puiOUT = (*puiOUT >> 8) ^ rg_uliLUT[(*puiOUT & 0x03) ^ *pucBuffer++];
}
}
提前谢谢你:D
最佳答案
只要 rg_uliLUT
是 const
那么是的,我认为您的函数是可重入的。如果该变量不是 const
并且被修改,那么答案是否定的,但是因为它是常量,所以没有调用者能够修改另一个调用者的状态变量(任何可以改变的都在调用者的私有(private)堆栈和唯一的“共享”数据无法更改。
来自好老wikipedia
In computing, a computer program or subroutine is called reentrant if it can be interrupted in the middle of its execution and then safely called again ("re-entered") before its previous invocation's complete execution.
所有函数状态对每个调用者都是私有(private)的(在调用者堆栈上)。唯一的其他状态是常量,因此因为调用者无法修改它,所以对于任何其他调用者来说它总是看起来相同,因此不会改变函数行为,例如,如果两个线程同时在函数中.
PS:如果puiOUT
指向的内存在调用者之间共享,则不可重入。也似乎 pucBuffer
可能是 char const *
因为它没有被写入。
关于c - 具有常量和静态局部变量的函数,使函数可重入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18076582/
嗨,我已经阅读了 Java 中的 ReadWriteLock,但我不确定我是否掌握了它的重入部分。这是两个仅使用一个主线程来显示重入的简短代码示例 public class Locks { p
我在使用 NotifyIcons 时发现了一个重入问题。重现它真的很容易,只需在表单上放置一个 NotiftIcon,点击事件应该如下所示: private bool reentrancyDetect
我正在尝试使用 SQLite 的新 C 接口(interface)预更新 Hook : https://www.sqlite.org/c3ref/preupdate_count.html 现在回答我的
来自阅读here我发现 Actor 是可重入的,并且我希望以下情况成立:如果我有单一类型的转换 ThespianType 但有三个特定的 Actor ThespianType (T1、T2 和 T3)
有人可以向我解释一下 BlockReentrancy 的目的是什么吗?方法在ObservableCollection ? MSDN显示以下内容作为示例: //The typical usage is
我是一名优秀的程序员,十分优秀!