如果一个函数中使用static局部变量,怎样才能使函数具有可重入性.

flyingcar 2005-02-24 05:05:47
RT
...全文
482 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
coppermine 2005-02-24
  • 打赏
  • 举报
回复
具有可重入性的函数暗含无状态特征,即函数的输出只由当前函数的输入决定而不依赖其他状态.
函数内部有静态变量表明函数是有状态的,所以这样的函数是不可重入.
可重入和同步/互斥是不同的概念.
masterz 2005-02-24
  • 打赏
  • 举报
回复
这样如何:
//VC2003
#include ...
void safe_func()
{
static volatile long counter=0;
static long protected_data = 0;
struct AutoCount
{
AutoCount()
{
long tmp = InterlockedIncrement(&counter);
m_is_first = (1==tmp);
}
~AutoCount()
{
InterlockedDecrement(&counter);
}
bool is_first()
{
return m_is_first;
}
bool m_is_first;
} counter_obj;
if(counter_obj.is_first())
{
//it is safe to access the protected data
protected_data++;
std::cout<<"can work"<<std::endl;
}
else
{
std::cout<<"previous task has not finished,exit now"<<std::endl;
}
}
int main()
{
safe_func();
return 0;
}
little_paradise 2005-02-24
  • 打赏
  • 举报
回复
应该说比较难,达淫帮顶
Great_Bug 2005-02-24
  • 打赏
  • 举报
回复
我的答案不够严谨。

但在某些时候,如果对该static变量的操作是不会被分割的操作,并且是只读或只写,则仍然可以重入。
ghwangtongji 2005-02-24
  • 打赏
  • 举报
回复
学习
flyingcar 2005-02-24
  • 打赏
  • 举报
回复
回复人: Great_Bug(想当软件工程师的代码工人,失业中...) ( ) 信誉:100 2005-02-24 18:22:00 得分: 0


既然用了static的局部变量,也就意味着不可重入,除非特殊的处理,或特殊的应用。


======================================================================

怎么处理呢?
Great_Bug 2005-02-24
  • 打赏
  • 举报
回复
既然用了static的局部变量,也就意味着不可重入,除非特殊的处理,或特殊的应用。
stevens2009 2005-02-24
  • 打赏
  • 举报
回复
不可能
xuelong_zl 2005-02-24
  • 打赏
  • 举报
回复
楼主好像,在描述的过程中已经把问题解决了,呵呵

现在只能同意楼上了
winstonch 2005-02-24
  • 打赏
  • 举报
回复
把这个static变量放在这个函数内.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧