• 函数重入、函数重载、函数重写自己理解


    创作人QQ:851301776,邮箱:lfr890207@163.com,欢迎大家一起技术交流,本博客主要是自己学习的心得体会,只为每天进步一点点!

    个人座右铭:
    1.没有横空出世,只要厚积一定发。
    2.你可以学历不高,你可以不上学,但你不能不学习

    一、函数重入

            在实时系统设计过程中,会出现多个任务(线程)调用同一个函数的情况。如果多个任务同时调用这个函数,有可能修改其他任务中的数据,从而导致不可遇到的后果。这个函数是不安全的,也叫不可重入函数

            相反,可重入函数是指可以同时被多个任务调用,在调用的过程中不必担心数据是否会出错。一个可重入的函数简单来说就是可以被中断的函数(CPU保存寄存器信息到栈,跳到中断位置加载指令到寄存器执行,执行完成后,返回继续执行),也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而

            不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。

            在编写可重入函数时,如果使用了全局变量,则应通过关闭中断、信号量等收到加一保护。

            说明:若对所使用的全局变量不加以保护,则此函数就不具有可重入性,即当多个进程调用此函数时,很有可能使有关全局变量变为不可知状态

    保证函数的可重入性的方法:

    • 在写函数时尽量使用局部变量,不使用全局变量。       
    • 不使用静态的数据结构,静态的数据结构,延长了变量的生命周期,使得右值(常量)变为了左值(变量)。
    • 不调用标准的I/O函数(不是线程安全的)
    • 不使用malloc和free(是线程安全的,但是不可重入) 

    Linux常见的可重入函数

     二、函数重写

    首先重写在C++继承当中使用较多。

            如果将基类中的某个成员函数声明为虚函数,那么子类中与该函数具有相同原型的成员函数就也是虚函数,并且对基类中版本形成覆盖,即函数重写

     三、函数重载

    C++中的概念,C语言当中不涉及重载

    在相同作用域中,定义同名的函数,但是它们的参数必须有所区分,这样的函数将构成重载关系

     以上三个函数,构成重载

    可参考:温故而知新二(C++)_QQ851301776的博客-CSDN博客

     

  • 相关阅读:
    CentOS7安装MySQL8
    Spring源码深度解析:十、bean的属性注入④ - populateBean
    【注解】注解解析与应用场景
    202112-2 CCF 序列查询新解 (枚举 + 分段讨论 满分题解)
    你最少用几行代码实现深拷贝?
    日常办公:批处理编写Word邮件合并获取图片全路径
    22-09-02 西安 JVM(01)类加载器、stack栈、堆体系、堆参数调优、GC垃圾判定、垃圾回收算法
    服装企业ERP系统的基本功能模块
    基于Python和TensorFlow实现BERT模型应用
    [Daimayuan] 最喜欢数学了(高数除外)(C++,逻辑推理)
  • 原文地址:https://blog.csdn.net/weixin_43155199/article/details/125634452