不可重入函数 与 可重入函数

原创 2016年05月30日 23:26:04

不可重入函数不可以在它还没有返回就再次被调用;该函数在被调用还没有结束之前,再次被调用,从而可能产生错误。 但是,可重入函数不存在这样的问题。

不可重入函数在实现时通常使用了全局的资源(eg. 全局变量),在多线程的环境下,如果没有很好的处理数据保护互斥访问,就可能会发生错误。

常见的不可重入函数有:

printf --- 引用全局变量stdout;

malloc --- 全局内存分配表,分配堆栈空间;

free --- 全局内存分配表,释放堆栈空间;

以prinf为例,中断在任何时候都可能发生,比如发生在prinft执行过程中,假若又发生了中断嵌套,而此时stdout资源被占用,所以第二个中断的printf等待第一个中断的stdout资源释放,而第一个中断等待第二个中断返回,造成了死锁,这样printf就发生了重入,这种情况是不允许的。

在unix里面,通常会有加上_r的后缀同名可重入函数版本。如果实在没有,不妨在可预见的发生错误的地方尝试加上保护锁同步机制等。



版权声明:本文为博主原创文章,未经博主允许不得转载。

可重入和不可重入

重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。 一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLO...
  • wenhui_
  • wenhui_
  • 2011年10月19日 21:51
  • 25214

不可重入函数总结

1.malloc,free, printf均是不可重入函数(意味不能在中断函数或信号处理函数同时调用),但是线程安全函数(意味它可以被多个线程调用) 2.函数有static变量,则该函数是不可重入函数...
  • zyboy2000
  • zyboy2000
  • 2016年04月11日 12:59
  • 2044

可重入函数与不可重入函数概念以及编写规范

不可重入怎么改改成可重入函数。一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函...
  • xy010902100449
  • xy010902100449
  • 2015年06月12日 21:32
  • 2103

C语言之可重入函数 && 不可重入函数

转自:http://bubuko.com/infodetail-312842.html 可重入函数      在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸...
  • ruohuanni
  • ruohuanni
  • 2015年09月18日 21:11
  • 1161

浅谈可重入函数与不可重入函数

在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的...
  • lianghe_work
  • lianghe_work
  • 2015年08月13日 14:15
  • 2312

可重入函数与不可重入函数

  • 2011年06月17日 13:31
  • 1.38MB
  • 下载

函数可重入性及编写规范

一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反, 不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保...
  • yueyahe
  • yueyahe
  • 2006年05月15日 10:41
  • 29873

linux-可重入与不可重入函数

主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使...
  • yang8518296
  • yang8518296
  • 2013年09月20日 12:46
  • 1164

关于static和可重入函数

1、概述   static 声明的变量在C语言中有两方面的特征:   1)、变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值。这一点是它与堆栈变量和堆变量的区别。 ...
  • gj19890923
  • gj19890923
  • 2013年06月03日 21:59
  • 2482

重入性和不可重入性(好文)(未读)

   重入性和不可重入性2007年04月16日 10:17from http://blog.donews.com/cooperyuan/archive/2005/12/05/647868.aspx  ...
  • thimin
  • thimin
  • 2007年04月22日 00:42
  • 3433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不可重入函数 与 可重入函数
举报原因:
原因补充:

(最多只允许输入30个字)