《可重入函数和不可重入函数》
1.可重入函数和不可重入函数的概念
可重入函数:在函数中如果我们使用静态变量了,导致产生中断调用别的函数的 过程中可能还会调用这个函数,于是原来的 静态变量被在这里改变了,然后返回主体函数,用着的那个静态变量就被改变了,导致错误。
不可重入函数:如果是在函数体内 动态申请内存的话,即便 新的线程调用这个函数也没事,因为新的线程使用的是新的函数的 新申请的动态内存(静态变量只有一份,所以 多线程对于函数体内的静态变量改变 会有无法修复的结果。
2.什么函数被认为是不可重入函数?
(1)函数体内使用了静态的局部变量以及全局变量; (2)函数体内调用了malloc()或者free()函数; //这两个函数本身就是不可重入函数 (3)函数体内调用了标准I/O函数。 //就是printf这些函数
3.如何编写可重入函数?
1.在函数体中尽量使用缺省态(auto)局部变量 2.当一定要使用全局变量的时候,要做好互斥信号量来保护该资源。 3.也可以在调用该函数前关中断,调用完成后再开中断
因此在多线程编程中,当一个函数体会被多个线程所调用,或者随时可能被产生的中断所调用。那么这个函数体要是可重入函数。