什么是函数的重入
所谓重入,就是指某段子程序还没有执行完,就因为中断或者是多任务操作系统的调度原因,导致该子程序在一个新的寄存器上下文中被执行
引发函数重入的原因
- 中断
- 任务调度
- 递归
函数可重入的条件
一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误。满足下列条件的函数多数是不可重入的:
- 函数体内使用了全局变量;
- 函数体内使用了静态的数据结构
- 函数体内调用了malloc()或者free()函数;
- 函数体内调用了标准I/O函数;标准io库很多实现都以不可重入的方式使用全局数据结构
- 函数体内进行了浮点运算。许多的处理器/编译器中,浮点一般都是不可重入的 (浮点运算大多使用协处理器或者软件模拟来实现
保证函数可重入的方法
- 使用局部变量
- 不调用不可重入函数
- 如果确实需要访问全局变量(包括static),一定要注意实施互斥手段:如信号量等
什么是函数递归
函数自己直接或间接调用自己
函数递归的注意点
- 函数递归也是一种重入
- 避免递归的深度很深时,会造成函数栈的溢出
2万+



被折叠的 条评论
为什么被折叠?



