首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

"信号安全" 和 "可重入" 是一个概念吗?解决方法

2012-03-14 
信号安全 和 可重入 是一个概念吗?信号安全 和可重入 是一个概念吗?如果不是,区别在哪里?[解决办

"信号安全" 和 "可重入" 是一个概念吗?
"信号安全 "   和   "可重入 "   是一个概念吗?如果不是,区别在哪里?

[解决办法]
可重入就是,一个函数没有执行完成,由于外部因素或内部调用,又一次进入该函数执行。
可重入代码,必须保证资源的互不影响的使用,比如全局变量,系统资源等。

所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。不可重入函数在实时系统设计中被视为不安全函数。

满足下列条件的函数多数是不可重入的:
(1)函数体内使用了静态的数据结构;
(2)函数体内调用了malloc()或者free()函数;
(3)函数体内调用了标准I/O函数。

下面举例加以说明。

可重入函数
void strcpy(char* lpszDest, char* lpszSrc)
{
while(*lpszDest++ = *lpszSrc++);
*dest=0;
}

非可重入函数1
char cTemp; // 全局变量

void SwapChar1(char* lpcX, char* lpcY)
{
cTemp = *lpcX;
*lpcX = *lpcY;
lpcY = cTemp; // 访问了全局变量,在分享内存的多个线程中可能造成问题
}

非可重入函数2
void SwapChar2(char* lpcX, char* lpcY)
{
static char cTemp; // 静态局部变量
cTemp = *lpcX;
*lpcX = *lpcY;
lpcY = cTemp; // 使用了静态局部变量,在分享内存的多个线程中可能造成问题
}



[解决办法]
这里讲得比较详细

http://blog.csdn.net/yueyahe/archive/2006/05/15/729126.aspx

:)

热点排行