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

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

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

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

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

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

      

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

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

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

      

  • 相关阅读:
    libevent源码分析--(转)
    libevent源码分析(转)
    服务器模型---总结
    暴力英语学习法 + 严格的目标管理 = 成功快速靠谱的学好英语(转)
    log4net写入mysql完整例子
    form操作
    ASP.NET Razor
    java爬虫:在请求body中增加json数据采集
    asp.net mvc3登录验证
    远程复制无法读取源文件或磁盘
  • 原文地址:https://www.cnblogs.com/zhuangquan/p/15057391.html
Copyright © 2011-2022 走看看