原创 函数的可重入性

2009-10-12 21:34 2502 0 分类: 软件与OS

若一个程序子程序可以安全地被并行执行,则称其为可重入(reentrantre-entrant)的;即当该子程序正在运行时,可以再次进入并执行它。若一个函数是可重入的,则该函数:


(1) 不能含有静态(全局)非常量数据。


(2) 不能返回静态(全局)非常量数据的地址。


(3) 只能处理由调用者提供的数据。


(4) 不能依赖于单实例模式资源的锁。


(5) 不能调用不可重入的函数。


多用户/对象/进程优先级一般会使得对可重入代码的控制变得复杂。同时,IO代码通常不是可重入的,因为它们依赖于像磁盘这样共享的、单独的资源。


在以下的C语言代码中,函数f和函数g都不是可重入的。


int g_var = 1;


      


int f()


{


             g_var = g_var + 2;


             return g_var;


}


      


int g()


{


      return f() + 2;


}


以上代码中,f使用了全局变量 g_var,所以,如果两个线程同时执行它并访问g_var,则返回的结果取决于执行的时间,因此,f不可重入。而g调用了f,所以它也不可重入。


稍作修改后,两个函数都是可重入的:


int f(int i)


{


             return i + 2;


}


      


int g(int i)


{


             return f(i) + 2;


}

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
gujunyi1_407560534 2011-03-22 16:43
NP0,X5R,X7R,Y5V释义及其用途
这个是按美国电工协会(EIA)标准,根据不同介质材料而分类。这类参数描述了电容采用的电介质材料类别,温度特性以及误差等参数,不同的值也对应着一定的电容容量的范围。具体来说,就是:X7R常用于容量为33...
gujunyi1_407560534 2011-03-22 16:29
转贴:电容的选型
从电子产品的设计到采购来看,无源元件只是一个配角,其在整个电子产品中所占的物料成本仅约一成,但电子产品中的无源元件数量却是最多的。以电容为例,从2G发展到3G,仅一部手机中的MLCC数量就从平均165...
gujunyi1_407560534 2011-01-28 12:34
手把手将你用PADS Layout 2007.2生成Gerber文件
        本文主要讲述如何利用PADS 2007.2 Layout生成Gerber文件,由于内容较多,所以不再一一列出,这里仅贴出里面第一页的内容,总共14页。需要的博友们可以下载后观看,如有问...
gujunyi1_407560534 2011-01-12 16:10
DxDesigner的两个使用技巧-你一定用得着,而且很有帮助
...
gujunyi1_407560534 2010-11-22 13:47
VCC、VDD、VEE、VSS释疑汇总
在电子电路中,常可以看到VCC、VDD和VSS三种不同的符号,它们有什么区别呢?1、解释VCC:C=Circuit 表示电路的意思,即接入电路的电压;VDD:D=Device 表示器件的意思,即器件内...
gujunyi1_407560534 2010-11-17 12:23
晶体振荡器专题介绍
1、晶振的作用       晶振是晶体振荡器的简称,分为有源晶振和无源晶振两种,有源晶振无需外接匹配电容,只要加电即可输出一定频率的周期波形,所以有源晶振一般是四个引脚;无源晶振严格来说不能叫晶振,只...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条