可重入函数与不可重入函数的区别

    可重入函数可以做这样的基本定义:重入意味着这个函数可以重复进入,可以被并行调用 ,可以被中断,它只使用自身栈上的数据变量,它不依赖于任务环境,在多任务调度过程中,它是安全的,不必担心数据出错。
    不可重入函数基本上与可重入函数有相反的定义了:不可重入,意味着不可被并行调度 ,否则会产生不可预料的结果,这些函数提内一般使用了静态(static)的数据结构 ,使用了malloc()或者free()函数,使用了标准I/O函数等等。

 

  可重入函数:
  不为连续的调用持有静态数据。 
  不返回指向静态数据的指针;所有数据都由函数的调用者提供。 
  使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
  如果必须访问全局变量,记住利用互斥信号量来保护全局变量。
  绝不调用任何不可重入函数。
  不可重入函数:
  函数中使用了静态变量,无论是全局静态变量还是局部静态变量。 
  函数返回静态变量。 
  函数中调用了不可重入函数。
  函数体内使用了静态的数据结构;
  函数体内调用了malloc()或者free()函数;
  函数体内调用了其他标准I/O函数。
  函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量 。
  总的来说,如果一个函数在重入条件下使用了未受保护的共享的资源,那么它是不可重入的。

 


你可能感兴趣的:(C,C++基础)