gpt4 book ai didi

c - 具有常量和静态局部变量的函数,使函数可重入?

转载 作者:行者123 更新时间:2023-12-04 11:09:38 25 4
gpt4 key购买 nike

我有一个带有静态常量局部变量的函数,该函数是否可重入?

这是代码:

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_uliLUTconst 那么是的,我认为您的函数是可重入的。如果该变量不是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com