可重入函数与不可重入函数
程序员文章站
2022-06-16 10:18:07
主要体现在实时操作系统(RTOS)中,即多任务环境中,经常会出现多个任务调用同一个函数的情况。一、不可重入函数1、概念不可重入函数,即不能重复进入的函数,不能被中断的函数。在多个任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。不可重入函数在实时系统设计中被视为不安全函数。2、特点有以下条件都属于不可重入函数:函数体内使用了静态的数据结构;(static)函数体内调用了malloc()或者free()函数;函数体内调用了标准I/O函数。函数体...
主要体现在实时操作系统(RTOS)中,即多任务环境中,经常会出现多个任务调用同一个函数的情况。
一、不可重入函数
1、概念
不可重入函数,即不能重复进入的函数,不能被中断的函数。在多个任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。不可重入函数在实时系统设计中被视为不安全函数。
2、特点
有以下条件都属于不可重入函数:
- 函数体内使用了静态的数据结构;(static)
- 函数体内调用了malloc()或者free()函数;
- 函数体内调用了标准I/O函数。
- 函数体内访问了全局变量
3、其他
在许多的处理器/编译器中,浮点一般都是不可重入的。
printf()经常有重入和性能上的问题。
二、可重入函数
1、概念
可重入函数,即可以重复进入的函数,能被中断的函数。可以在这个函数执行的任何时候中断他的运行,在任务调度下去执行另外一段代码而不会出现什么错误。
2、实现
- 在函数体内不访问那些全局变量,不使用静态局部变量,坚持只使用缺省态(auto)局部变量。
- 如果使用全局变量(包括static),则应通过关中断、信号量(即P、V操作)等互斥方法对其加以保护。否则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使有关全局变量变为不可知状态。
- 在和硬件发生交互的时候,关闭硬件中断。完成交互打开中断。
不能调用其它不可重入的函数。
本文地址:https://blog.csdn.net/p1279030826/article/details/107638728
上一篇: Vue3 插槽使用汇总
下一篇: C++学习之移动语义与智能指针详解