C语言之可重入函数 和不可重入函数

C语言之可重入函数 和不可重入函数nbsp 可重入函数 nbsp nbsp nbsp 在实时系统的设计中 经常会出现多个任务调用同一个函数的情况 如果这个函数不幸被设计成为不可重入的函数的话 那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据 从而导致不可预料的后果 那么什么是可重入函数呢 所谓可重入是指一个可以被多个任务调用的过程 任务在调用时不必担心数据是否会出错 不可重入函数在实时系统设计中被视为不安全函数 nbsp 满足

 

那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。

那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会 出错。

写出的函数就将是可重入的。如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

,一段时间以后又可以运行,而相应的数据不会丢失。可重入函数或者只使用局部变量,

在任务调度下去执行另外一段代 码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,比如全局变量区,

__interrupt double compute_area (double radius)  {     double area = PI * radius * radius;     printf("\nArea = %f", area);     return area; } 

在OS的调度下去执行另外一段代码而不会出现什么错误。而不可重入的函数由于使用了一些系统资源,

压栈,转向ISR,弹栈后继续执行影响的稳定性。也就是说具有不会被中断影响的能力。既然有这个要求,

你提供和编写的每个函数就不能拿公共的资源或者是变量来使用,因为该函数使用的同时,ISR(中断服务程序)

void strcpy(char* lpszDest, char* lpszSrc) {      while(*lpszDest++ = *lpszSrc++);      *dest=0; }
char cTemp;            // 全局变量 void SwapChar1(char* lpcX, char* lpcY) {      cTemp = *lpcX;       *lpcX = *lpcY;       lpcY = cTemp;     // 访问了全局变量,在分享内存的多个线程中可能造成问题 }
void SwapChar2(char* lpcX, char* lpcY) {      static char cTemp;  // 静态局部变量      cTemp = *lpcX;       *lpcX = *lpcY;       lpcY = cTemp;   // 使用了静态局部变量,在分享内存的多个线程中可能造成问题 }

如果必须访问全局变量,记住利用互斥信号量来保护全局变量。

 

 

备注:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文转自:

http://www.cnblogs.com/AlwaysOnLines/p/3912680.html

https://blog.csdn.net/zyboy2000/article/details/

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224528.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:44
下一篇 2026年3月17日 上午11:44


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号