重入:当不同的控制流程调用同一个函数时,有可能当一个调用还没返回时,另一个调用就进入了该函数,将其称作重入;
不可重入函数:当一个函数由于可重入出错,则将此函数称为不可重入函数;
可重入函数:当一个函数由于可重入而不影响各自流程的正确结果(其只访问自己的局部变量和参数),将此函数称作可重入函数;
举例:常见情况中,当程序正在执行到某一个函数中的某一条指令时,这时其收到了一个信号,于是其暂停执行去处理信号,执行此信号的处理动作,而这个信号处理动作的函数正好为刚刚执行到函数,于是就对此函数造成了可重入,而当信号处理动作执行此函数正确运行,程序返回时之前暂停执行的此函数也能正确运行,则将此函数称为可重入函数。
注意:重入前提条件是不同的控制流程访问同一个函数,而信号处理函数和main函数正是使用不同的堆栈空间,它们之间不存在调用和被调用的关系,就是两个独立的控制流程。
确保可重入函数的必要条件如下:
(1)不在函数内部使用静态和全局数据(由于进程不同的控制流程访问共享数据会造成数据错乱);
(2)不调用malloc或free,因为ma