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

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

 

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

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值