社区
C语言
帖子详情
如果一个函数中使用static局部变量,怎样才能使函数具有可重入性.
flyingcar
2005-02-24 05:05:47
RT
...全文
482
10
打赏
收藏
如果一个函数中使用static局部变量,怎样才能使函数具有可重入性.
RT
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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变量放在这个函数内.
C语言
中
static
的用法(修饰
局部变量
,修饰全局变量,修饰
函数
)
static
关键字有三种用法
static
修饰
局部变量
- 静态
局部变量
static
修饰全局变量 - 静态全局变量
static
修饰
函数
- 静态
函数
static
关键字的三种用法1.
static
修饰
局部变量
- 静态
局部变量
2.
static
修饰全局变量 - 静态全局变量3.
static
修饰
函数
- 静态
函数
1.
static
修饰
局部变量
- 静态
局部变量
static
可使得
局部变量
出了自己的范围也不会销毁,本质上是改变了
局部变量
的生命周期,但其作用域还是局部的。 详细点说,
普通
局部变量
与
static
局部变量
的区别
普通
局部变量
与
static
局部变量
的区别 内存分配和释放 1、普通
局部变量
只有执行到变量定义的语句的时候才分配空间。 2、
static
局部变量
在编译阶段(
函数
还没有执行),变量的空间已经分配。 3、普通
局部变量
离开作用域{},自动释放其空间,也就无法
使用
此变量。 4、
static
局部变量
只有在整个程序结束的时候才将其自动释放。 初始化 1、普通
局部变量
不初始化,为随机值。 2、
static
局部变量
...
C/C++
中
static
的作用(修饰
局部变量
、修饰全局变量、修饰
函数
)
一、
static
修饰
局部变量
局部变量
的作用范围为定义该
局部变量
的代码块或
函数
范围内有效,
局部变量
的生命周期随着
函数
的调用而创建,并且随着
函数
调用结束而销毁。
static
修饰的
局部变量
的作用域并不会改变,只是生命周期会随着整个程序运行结束而结束。
局部变量
和静态
局部变量
的区别:
使用
static
修饰
局部变量
的方法:在
局部变量
前面加
static
关键字,例如:
static
int a; 经过
static
修饰的
局部变量
称为静态
局部变量
,未经
static
修饰的
局部变量
称为动...
c语言
中
函数
static
变量,[转]C语言
中
的
static
变量、
static
函数
1.
static
变量静态变量的类型 说明符是
static
。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量。 例如外部变量虽属于静态 存储方式,但不一定是静态变量,必须由
static
加以定义后才能成为静态外部变量,或称静态全局变量。2. 静态
局部变量
静态
局部变量
属于静态存储方式,它
具有
以下特点:(1) 静态
局部变量
在
函数
内定义 它的生存期为整个源程序,但是其作...
普通
局部变量
、
static
局部变量
、普通全局变量、
static
全局变量的区别
普通
局部变量
和
static
局部变量
: 1、 ①
static
局部变量
在编译阶段就已经分配内存空间了,也就是
函数
没有调用前它就已经存在了。 ② 普通
局部变量
只有运行到定义该变量的时候才会分配内存空间。 2、 ① 当执行完定义该
static
局部变量
的
函数
体后,该
static
变量的内存空间不会被释放,只有程序结束时
static
变量才会自动释放。 ② 当执行完定义该普通
局部变量
的
函数
体后,该普通...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章