可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果的正确性的函数。在编写可重入函数时通常要注意如下的一些问题: 尽量不要使用全局变量,静态变量,如果使用了应该注意对变量访问的互斥。通常可以根据具体的情况采用:信号量机制,关调度机制,关中断机制等方式来保证函数的可重入性。 不要调用不可重入...
解析 答:可重入型函数可以被一个以上的任务调用,而不必担心数据的破坏。可重入型函数任何时候都可以被中断,一段时间以后又可以运行,而相应数据不会丢失。可重入型函数或者只使用局部变量,即变量保存在CPU寄存器中或堆栈中。如果使用全局变量,则要对全局变量予以保护。
答:主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全函数,在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环...
那么什么是可重入函数呢?所谓可重入函数是指一个可以被多个任务调用的函数(过程),任务在调用时不必担心数据是否会出错。不可重入函数在实时系统设计中被视为不安全函数。满足下列条件的函数多数是不可重入的:1) 函数体内使用了静态的数据结构;2) 函数体内调用了malloc()或者free()函数;3) 函数体内调用了标准I...
可重入函数指的是,有多个线程在并发的执行一个函数。这个时候,如果两个函数会操作同一个全局的变量。这就是上面说的场景了。 什么样的函数不可重入: 函数体内使用了静态的数据结构(全局变量等)。 函数体内调用了malloc()或者free()函数。 函数体内调用了标准I/O函数。
Autosar中的Reentrant/Non-Reentrant函数示例 可重入函数示例所示: 不可重入函数示例如下所示: Autosar函数中,如有对共享资源进行保护,则该函数就是不可重入函数,以Com_IpduGroupControl()为例,看一下不可重入函数是如何保护共享资源的: ...Com_TxIPduGroup_EnterExclusiveArea(); ...
Reentrant函数是指可以在多个任务同时调用且不会影响全局数据一致性的函数。例如,当TaskA和TaskC都调用Function_Opt(),并共享全局变量Argu_A时,可重入函数需确保对Argu_A的修改不会导致其他任务出错。为了防止数据破坏,函数需要正确地管理和保护共享资源,如使用互斥机制或在访问临界区时关闭中断。相比之...
也就是说,一个可重入函数肯定是线程安全的,而线程安全函数并不一定是可重入函数,不可重入函数也有可能是线程安全的,比如我们常见的malloc函数,就是不可重入函数,但是是线程安全的,为什么呢? 通过《C语言嵌入式Linux高级编程》课程学习,我们已经知道,对于我们使用malloc/free申请释放的内存,glibc在用户空间实现了一个...
可重入函数这一概念早有接触,但一直未有系统的理解,最近阅读《APUE》信号一章时,其中讲解很到位,故总结如下。 信号作为一种软中断,能够被进程给捕获,因而也就中断进程的正常执行,转而去执行信号处理程序,最后再返回到原进程继续正常执行。然而,当进程正在执行malloc()动态内存分配时,信号产生从而转入到信号处理程序,...