Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >c语言可重入函数_c语言不可重入函数有哪些

c语言可重入函数_c语言不可重入函数有哪些

作者头像
全栈程序员站长
发布于 2022-11-17 07:44:37
发布于 2022-11-17 07:44:37
88300
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

什么是可重入函数

可重入函数指一个可同时被多个任务调用的过程,当一个函数满足下列条件时多为不可重入函数

(1)函数中使用了静态的数据结构;

(2)函数中使用了malloc()、free()函数;

(3)函数汇总调用了标准I/O函数。(如open、read、write、close等系统调用)

如何编写可重入函数

(1)编写可重入函数时,不应使用static局部变量,应使用auto即缺省态局部变量或寄存器变量。

(2)当使用全局变量时,要利用互斥信号量或互斥锁来保护全局变量,或调用该函数前关中断,执行完后再开,避免其他任务同时执行该函数。

不可重入函数示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Num为int型全局变量,函数Inc_Num返回Num加1的值
unsigned int example(int value)
{
    unsigned int tmp;
    
    Num = value;
    tmp = Inc_Num();

    return tmp;
}

可重入示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Num为int型全局变量,函数Inc_Num返回Num加1的值
unsigned int example(int value)
{
    unsigned int tmp;
    
    //增加申请信号量操作,P操作
    Num = value;
    tmp = Inc_Num();
    //增加释放信号量操作,V操作

    return tmp;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/234120.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年11月3日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C语言可重入函数和不可重入函数
  在函数中如果我们使用静态变量了,导致产生中断调用别的函数的 过程中可能还会调用这个函数,于是原来的 静态变量被在这里改变了,然后返回主体函数,用着的那个静态变量就被改变了,导致错误。这类函数我们称为不可重入函数。
心跳包
2020/08/31
3.6K0
关于可重入函数
最近在公司维护的项目中碰到一个解决了定位很久的 bug , bug 找到的时候发现犯了很低级的错误——在中断处理函数中调用了 printf 函数,因为中断处理函数的调用了不可重入函数,导致中断丢失和系统位置错误,这里直接导致嵌入式 linux 系统应用进程中的所有线程停掉,进而导致看门狗进程得不到喂狗,设备重启。
C语言与CPP编程
2020/12/02
7490
Linux系统下读取目录操作及可重入函数介绍
在写文章之前,分享一下今晚看伟东山老师的直播收获心得。我自身是一个小菜鸟,第一次听QEMU模拟器软件,不过听完老师的介绍感觉这功能好强大,感觉都不用买硬件了来做实验的(不过还是建议买开发板来做实验,比较有感觉,因为它还是不能模拟出特别先进的芯片,以及无法模拟出类似于GPU等复杂的硬件,而且搞底层软件开发的,还是要有开发板来支持的;当然,当你手头不是宽裕的时候,这个时候QEMU还是可以派上一定的作用了,至少可以测试一般的外设功能的,还是很强大的,我自己也在摸索使用),这里有兴趣的小伙伴可以看这个教程--------http://wiki.100ask.org/100ask_imx6ul_qemu。同时也非常期待伟老师后期录制的新教学视频。
用户6280468
2022/03/18
1.8K0
Linux系统下读取目录操作及可重入函数介绍
可重入函数对于线程安全的意义(附函数表)
不可重入函数: 在并发服务器中,经常会出现多个任务调用同一个函数的情况,比方说后端服务器使用多线程同时对数据库进行访问操作。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。 (其实也没什么不可预料的,就是服务器崩了呗,然后我就完了呗)
看、未来
2020/08/25
2.8K0
C语言(可重入函数)
大家都写过C语言中的函数,但有没有想过,你编写的函数在同一个时刻是否允许被多个调用者调用呢?是不是不管谁来调用,有多少个调用者同时调用,都能给出一致的表现,返回一致的结果?
用户2617681
2019/08/08
2.4K0
C语言(可重入函数)
可重入函数
POSIX.1-20001标准规定,所有的标准库函数都必须是可重入函数,除了以下这些:
看、未来
2021/09/18
3850
Linux并发(函数的可重入性)
可重入函数是并发编程中必须要考虑的问题,否则代码就会有隐患,更糟糕的是这些隐患往往只能在特定场景下才能复现。
用户2617681
2019/08/08
1.3K0
Linux并发(函数的可重入性)
如何编写可重入(Reentrant)且线程安全(Thread-safe)的代码 [译]
单线程的进程中仅有一个控制流。这种进程执行的代码无需可重入或线程安全。在多线程的程序中,同一函数或资源可能被多个控制流并发访问。为保护资源完整性,多线程程序编码必须可重入且线程安全。
Flowlet
2023/08/11
5820
如何编写可重入(Reentrant)且线程安全(Thread-safe)的代码 [译]
Linux C库函数的可重入与不可重入版本说明
在多线程编程中,线程安全(Thread-Safety)是一个非常重要的概念,而可重入性(Reentrancy)是确保线程安全的一个关键因素。
不脱发的程序猿
2024/12/30
1770
Linux C库函数的可重入与不可重入版本说明
【Qt】Qt的线程(两种QThread类的详细使用方式)「建议收藏」
Qt提供QThread类以进行多任务处理。与多任务处理一样,Qt提供的线程可以做到单个线程做不到的事情。例如,网络应用程序中,可以使用线程处理多种连接器。
全栈程序员站长
2022/09/01
12.4K0
写中断程序要注意哪些方面?
与每类I/O设备相关的进程都有一个靠近内存底部的地址,称作中断向量。它包括中断服务程序的入口地址。
Jasonangel
2021/05/28
3.7K0
Google C++编程风格指南(二)之函数的相关规范
定义:内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。
恋喵大鲤鱼
2018/08/03
9580
Google C++编程风格指南(二)之函数的相关规范
Linux线程-互斥与同步
Linux互斥与同步 零、前言 一、Linux线程互斥 1、基本概念及引入 2、互斥量mutex介绍 3、互斥量的使用 4、互斥量原理 二、可重入/线程安全 1、基本概念 2、线程安全 3、重入函数 4、联系与区别 三、常见锁概念 四、Linux线程同步 1、基本概念 2、条件变量的使用 3、条件变量等待 4、条件变量使用规范 五、POSIX信号量 1、信号量概念及介绍 2、信号量的使用 零、前言 本章主要讲解学习Linux中对多线程的执行中的同步与互斥 一、Linux线程互斥 1、基本概念及引入 互
用户9645905
2022/11/30
1.8K0
Linux线程-互斥与同步
使用可重入函数进行更安全的信号处理
在早期的编程中,不可重入性对程序员并不构成威胁;函数不会有并发访问,也没有中断。在很多较老的 C 语言实现中,函数被认为是在单线程进程的环境中运行。
一见
2018/08/07
1.7K0
如何设计嵌入式系统?带你理解一个小型嵌入式操作系统的精髓
1 多任务机制 其实在单一CPU 的情况下,是不存在真正的多任务机制的,存在的只有不同的任务轮流使用CPU,所以本质上还是单任务的。但由于CPU执行速度非常快,加上任务切换十分频繁并且切换的很快,所以我们感觉好像有很多任务同时在运行一样。这就是所谓的多任务机制。 实时系统的特征是延时可预测,能够在一个规定的时间内(通常是 ms 级别的)对某些信号做出反应。 2 任务的状态 任务有下面的特性:任务并不是随时都可以运行的,而一个已经运行的任务并不能保证一直占有 CPU 直到运行完。一般有就绪态,运行态,挂起态等
刘盼
2018/03/16
1.4K0
如何设计嵌入式系统?带你理解一个小型嵌入式操作系统的精髓
【linux学习指南】可重入函数与volatile
该关键字在C当中我们已经有所涉猎,今天我们站在信号的⻆度重新理解⼀下 Makefile文件
学习起来吧
2024/12/31
1590
【linux学习指南】可重入函数与volatile
可重入函数 VS 线程安全
前言:在多线程的初步学习中,有两个概念时常被一起提到,是否可重入与线程是否安全,由于这两者有一定的关联性,就有部分的同学将其混为一谈。
比特大冒险
2023/10/17
2180
【Linux】互斥锁、基于阻塞队列、环形队列的生产消费模型、单例线程池
大部分情况,线程使用的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程无法获得这种变量。 但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。而多个线程并发的操作共享变量,会带来一些问题。
_小羊_
2025/02/03
690
【Linux】互斥锁、基于阻塞队列、环形队列的生产消费模型、单例线程池
【Linux】一篇文章带你了解Linux多线程&&线程控制&&线程安全&&线程互斥详解
进程的多个线程共享 同一地址空间,因此Text Segment、Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:
用户10925563
2024/08/29
3170
【Linux】一篇文章带你了解Linux多线程&&线程控制&&线程安全&&线程互斥详解
后台开发:核心技术与应用实践--线程与进程间通信
进程在多数早期多任务操作系统中是执行工作的基本单元。进程是包含程序指令和相关资源的集合,每个进程和其他进程一起参与调度,竞争 CPU 、内存等系统资源。每次进程切换,都存在进程资源的保存和恢复动作,这称为上下文切换。进程的引入可以解决多用户支持的问题,但是多进程系统也在如下方面产生了新的问题:进程频繁切换引起的额外开销可能会严重影响系统性能。
范中豪
2021/04/01
1.4K0
后台开发:核心技术与应用实践--线程与进程间通信
推荐阅读
相关推荐
C语言可重入函数和不可重入函数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验