栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言安全编码之可重入函数】1、可重入函数的基本概念

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言安全编码之可重入函数】1、可重入函数的基本概念

  • 作者简介:花神庙码农(专注于Linux、WLAN、TCP/IP、Python等技术方向)
  • 博客主页:花神庙码农 ,地址:https://blog.csdn.net/qxhgd
  • 系列专栏:C语言相关
  • 如觉得博主文章写的不错或对你有所帮助的话,还望大家三连支持一下呀!!! 关注✨、点赞、收藏、评论。
  • 如需转载请参考转载须知!!

本系列文章将围绕可重入函数展开,将会涉及可重入函数的概念、要求、不可重入函数的处理等,敬请各位期待。

可重入函数 定义
  • 如果计算机程序或例程在其先前的调用完成之前可以安全地再次调用,则该计算机程序或例程被称为可重入的(它可以被安全地并发执行);
  • 简而言之,可重入函数的安全的,不可重入函数是不安全的。
适用场景
  • 中断

如该函数在执行过程中,发生中断,ISR开始执行,之后恢复该函数的执行,所以可重入的函数,简单来说就是可以被中断的函数;ISR本身也应该是可重入的函数。

  • 并发

在并发服务器中,一个函数在被多个任务调用的过程中,任务在调用时不必担心数据是否会出错。

  • 递归函数

递归函数天生就会被自己打断。

满足的条件
  • 不能保存静态或全局的非常量数据;
  • 不能将地址返回给静态(或全局)非常量数据;
  • 必须只处理调用者提供给它的数据;
  • 不能依赖锁来锁定单例资源;
  • 不得修改自己的代码(除非在自己独特的线程存储中执行);
  • 不得调用不可重入的计算机程序或例程。
例子
  • 例1、非重入函数
int x;
int my_first_nonreentrant_function() {
   return x * 10;
}
int my_second_nonreentrant_function() {
   return my_function() * 20;
}
  • 例2、可重入函数
int my_first_reentrant_function(int x) {
   return x * 10;
}
int my_second_reentrant_function(int x) {
   return my_first_reentrant_function(x) * 20;
}
实际应用 C库函数
  • 有些库函数是不可重入的,使用时要格外小心,从网上找到一个表格,供参考:
  • 可重入函数如下:
自己编写函数
  • 了解了可重入函数的要求后,在编写可能涉及重入场景的函数时,需要严格按照要求来编写。

如本文对你有些许帮助,欢迎大佬支持我一下,您的支持是我持续创作的不竭动力
支持我的方式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1011096.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号