- 作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
- 博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
- 系列专栏:C语言相关
- 如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 关注✨、点赞、收藏、评论。
- 如需转载请参考转载须知!!
可重入函数 定义本系列文章将围绕可重入函数展开,将会涉及可重入函数的概念、要求、不可重入函数的处理等,敬请各位期待。
- 如果计算机程序或例程在其先前的调用完成之前可以安全地再次调用,则该计算机程序或例程被称为可重入的(它可以被安全地并发执行);
- 简而言之,可重入函数的安全的,不可重入函数是不安全的。
- 中断
如该函数在执行过程中,发生中断,ISR开始执行,之后恢复该函数的执行,所以可重入的函数,简单来说就是可以被中断的函数;ISR本身也应该是可重入的函数。
- 并发
在并发服务器中,一个函数在被多个任务调用的过程中,任务在调用时不必担心数据是否会出错。
- 递归函数
满足的条件递归函数天生就会被自己打断。
- 不能保存静态或全局的非常量数据;
- 不能将地址返回给静态(或全局)非常量数据;
- 必须只处理调用者提供给它的数据;
- 不能依赖锁来锁定单例资源;
- 不得修改自己的代码(除非在自己独特的线程存储中执行);
- 不得调用不可重入的计算机程序或例程。
- 例1、非重入函数
int x;
int my_first_nonreentrant_function() {
return x * 10;
}
int my_second_nonreentrant_function() {
return my_function() * 20;
}
- 例2、可重入函数
int my_first_reentrant_function(int x) {
return x * 10;
}
int my_second_reentrant_function(int x) {
return my_first_reentrant_function(x) * 20;
}
实际应用
C库函数
- 有些库函数是不可重入的,使用时要格外小心,从网上找到一个表格,供参考:
- 可重入函数如下:
- 了解了可重入函数的要求后,在编写可能涉及重入场景的函数时,需要严格按照要求来编写。
如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式



