《可重入函数和不可重入函数》

1.可重入函数和不可重入函数的概念

  可重入函数:在函数中如果我们使用静态变量了,导致产生中断调用别的函数的 过程中可能还会调用这个函数,于是原来的 静态变量被在这里改变了,然后返回主体函数,用着的那个静态变量就被改变了,导致错误。

  不可重入函数:如果是在函数体内 动态申请内存的话,即便 新的线程调用这个函数也没事,因为新的线程使用的是新的函数的 新申请的动态内存(静态变量只有一份,所以 多线程对于函数体内的静态变量改变 会有无法修复的结果。

 

2.什么函数被认为是不可重入函数?

(1)函数体内使用了静态的局部变量以及全局变量;
(2)函数体内调用了malloc()或者free()函数;   //这两个函数本身就是不可重入函数
(3)函数体内调用了标准I/O函数。     //就是printf这些函数   

  

3.如何编写可重入函数?

1.在函数体中尽量使用缺省态(auto)局部变量
2.当一定要使用全局变量的时候,要做好互斥信号量来保护该资源。
3.也可以在调用该函数前关中断,调用完成后再开中断

  因此在多线程编程中,当一个函数体会被多个线程所调用,或者随时可能被产生的中断所调用。那么这个函数体要是可重入函数。

 

 

 

 

 

 

 

 

 

  

 

posted @ 2021-07-25 11:44  一个不知道干嘛的小萌新  阅读(325)  评论(0编辑  收藏  举报