CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

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

楼主flyingcar(uClinux)2005-02-24 17:05:47 在 C/C++ / C语言 提问

RT 问题点数:20、回复次数:10Top

1 楼winstonch()回复于 2005-02-24 17:10:35 得分 4

把这个static变量放在这个函数内.Top

2 楼xuelong_zl(点雨点[我身上咋就没MM的香水味涅??#-_-])回复于 2005-02-24 17:44:46 得分 4

楼主好像,在描述的过程中已经把问题解决了,呵呵  
   
  现在只能同意楼上了Top

3 楼stevens2009(风)回复于 2005-02-24 18:10:45 得分 4

不可能Top

4 楼Great_Bug()回复于 2005-02-24 18:22:49 得分 4

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

5 楼flyingcar(uClinux)回复于 2005-02-24 18:43:49 得分 0

回复人:   Great_Bug(想当软件工程师的代码工人,失业中...)   (   )   信誉:100     2005-02-24   18:22:00     得分:   0      
     
     
        既然用了static的局部变量,也就意味着不可重入,除非特殊的处理,或特殊的应用。  
     
     
  ======================================================================  
   
  怎么处理呢?  
  Top

6 楼ghwangtongji(ghwang)回复于 2005-02-24 18:44:32 得分 0

学习Top

7 楼Great_Bug()回复于 2005-02-24 18:53:40 得分 0

我的答案不够严谨。  
   
  但在某些时候,如果对该static变量的操作是不会被分割的操作,并且是只读或只写,则仍然可以重入。Top

8 楼little_paradise()回复于 2005-02-24 19:31:48 得分 0

应该说比较难,达淫帮顶Top

9 楼masterz(www.fruitfruit.com)回复于 2005-02-24 19:33:26 得分 4

这样如何:  
  //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;  
  }Top

10 楼coppermine(coppermine)回复于 2005-02-24 21:23:06 得分 0

具有可重入性的函数暗含无状态特征,即函数的输出只由当前函数的输入决定而不依赖其他状态.  
  函数内部有静态变量表明函数是有状态的,所以这样的函数是不可重入.  
  可重入和同步/互斥是不同的概念.Top

相关问题

  • 关于函数返回局部变量
  • 有时成员函数里的局部变量也加 static修饰符,有什么用么?
  • 函数内局部变量的地址问题!
  • 关于递归函数的局部变量问题
  • 求助:关于函数返回值为局部变量
  • 关于全局变量,main()中局部变量与函数参数的问题
  • 如何在函数中访问被局部变量覆盖的全局变量
  • 关于函数内局部变量是否在函数调用完成后是否释放的问题。
  • 关于C++中静态局部变量以及static关键字的提问!
  • 使用多线程时,公有函数的局部变量会不会被线程共享而冲突?

关键词

  • 局部变量
  • 重入
  • autocount
  • counter
  • 特殊
  • 处理
  • static
  • long

得分解答快速导航

  • 帖主:flyingcar
  • winstonch
  • xuelong_zl
  • stevens2009
  • Great_Bug
  • masterz

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo