这两天刷题,偶然看到可重入函数这个名字,很惊奇自己学了这么久的java还不能完全清晰的说出这个名词的概念,所以专门做一篇笔记
可重入函数基本定义:
重入意味着这个函数可以重复进入,可以被并行调用,可以被中断,它只使用自身栈上的数据变量,它不依赖于任务环境,在多任务调度过程中,它是安全的,不必担心数据出错。
即可重入函数需要满足以下几个条件
1、执行过程可以被打断
2、被打断后,在该函数执行完毕之前,可以再次重新被调用
3、再此调用完毕以后,上次被打断的程序继续进行
在多任务环境中或者实时系统设计中,应该尽可能的使用可重入函数
常见的不可重入函数有:
printf --------引用全局变量stdout
malloc --------全局内存分配表
free --------全局内存分配表
不可重入原则
原则总结如下:
(1)不要使用static变量和全局变量,坚持只用局部变量;
(2)若必须访问全局变量,利用互斥信号量来保护全局变量;
(3)获取得知哪些系统调用是可重入的,在多任务处理程序中都使用安全的系统调用;
(4)不调用其它任何不可重入的函数;