zoukankan      html  css  js  c++  java
  • 《可重入函数和不可重入函数》

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

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

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

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

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

      

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

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

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

      

  • 相关阅读:
    《大型网站技术架构》学习笔记——架构演化
    ASP.NET MVC之Html.RenderAction
    设计模式学习笔记——面向对象设计原则
    设计模式学习笔记——类图
    观察者模式
    泛型接口
    泛型的实例化应用
    多线程第二种方式-实现runnable
    对象中的某个属性不希望被序例化--transient
    对象序例化
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/15057391.html
Copyright © 2011-2022 走看看