不可重入函数

可重入函数&不可重入函数 不可重入函数:在一个进程(假设叫进程1)中调用了一个函数,假如就在这时系统发生了中断,但是此时这个函数正在执行,系统就转区执行中断程序(假设叫进程2),如果在中断程序中,再次调用了这个函数,当中断程序返回,再次执行进程1的时候,就有可能影响在进程1中执行的这个函数。这种函数就叫做不可重入函数。譬如:malloc函数。在进程1中正在分配内存,转到中断程序时,又调用了这个函数分配内存。这时就可能造成进 阅读详情

C语言数据类型

/* RT-Thread version information */
#define RT_VERSION                      3L              /**< major version number */
#define RT_SUBVERSION                   1L              /**< minor version number */
#define RT_REVISION                     5L              /**< revise version number */

这里的L表示该数值为 ‌长整型(long)字面量‌
1 数据类型明确性‌
L 后缀显式声明该常量为 long 类型,确保编译器将其视为固定位宽的长整型而非默认的 int 类型,避免因编译环境差异导致的隐式类型转换问题
‌2 跨平台兼容性保障‌
嵌入式系统中不同架构(如ARM7/Cortex-M)的 int 类型位宽可能不同(16/32位),而 long 通常固定为32位。显式使用 L 后缀可统一版本号的数据类型,增强代码在异构硬件平台上的可移植性与可靠性
‌3 与RT-Thread数据类型体系匹配‌
RT-Thread自定义了基础数据类型(如 rt_int32_t、rt_uint32_t),这些类型在多数组架构下等效于 long。通过 L 后缀声明版本号,可直接与系统内部数据类型兼容,减少类型转换开销

同样的,U表示无符号,因为默认是int,加U就是无符号的int。

不可重入概念

不可重入‌ 的本质在于其依赖的‌共享全局状态‌在并发执行时会被破坏,导致计算结果不可靠甚至程序崩溃。

所以不可重入的意思是:因为资源共享,所以重入会导致错误发生,而不是资源锁死,第二次无法占用资源。
但上面的说法不够专业化,准啊也说法如下:
“不可重入”的核心含义是:函数或操作因依赖共享资源(如全局变量、静态数据),在并发或中断场景下被重入时会导致数据错误或逻辑混乱,而非资源被永久锁死导致第二次调用完全无法执行‌。

我之所以会有这样的误解其实是之前看到的一句话:“不可重入函数不能由超过一个任务所共享”,其实这句话强调是的数据危险性而非调用禁止性。
与此相对的,可重入函数要么使用纯局部变量,要么对共享资源做互斥保护。
不可重入函数:printf函数、浮点运算函数

面试问题之可重入函数与不可重入函数 通过本次的面试,我了解到函数有可重入和不可重入的区别,至此,我把我了解到的内容记录下来以便加深理解。 首先我们来简单聊聊什么是函数,且函数的作用。 1.什么是函数? 函数是用于完成特定任务的程序代码的自包含单元。 2.为什么使用函数? 第一,函数的使用可以省去重复代码的编写。如果程序中需要多次使用某种特定的功能,那么只需编写一个合适的函数即可。程序可以在任何需要的地方调用该函数,并且同一个函数可以在不同的程序中调用,就像在许多程序中需要使用 putchar() 函数一样。第二,即使某种功能在程序中 阅读详情

相关推荐

可重入函数和不可重入函数

可重入函数和不可重入函数 作为一个编程人员,一定要有可重入和不可重入概念,但工作中发现的现象让我大跌眼镜——很多人没听说过!!!亡羊补牢,为时不晚,现在在脑子中种下这颗概念种子也不迟。为什么说一定要有可重入和不可重入的概念呢,因为我们的程序肯定不只在main()函数中简单的跑一个while(1)循环,一般都会涉及到中断和操作系统。这时,就必须要考虑一个函数是不是可重入的以及如果不可重入对程序设计会...

guoweilkd的博客 576

什么是可重入函数, 不可重入函数? 哪些原因导致函数不可重入?

在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果有一个函数不幸被设计成为这样:那么不同任务调用这个函数时可能修改其他任务调用这个函数的数据,从而导致不可预料的后果。这样的函数是不安全的函数,也叫不可重入函数。相反,肯定有一个安全的函数,这个安全的函数又叫可重入函数。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。 不可重入(non-reentrant)函数

Ineffable__的博客 3928

可重入函数与不可重入函数

可重入函数与不可重入函数的举例,详细阐述了如何避免不可重入函数

不可重入函数总结

1.malloc,free, printf均是不可重入函数(意味不能在中断函数或信号处理函数同时调用),但是线程安全函数(意味它可以被多个线程调用) 2.函数有static变量,则该函数是不可重入函数 满足下面条件之一的多数是不可重入函数: (1)使用了静态数据结构; (2)调用了malloc或free; (3)调用了标准I/O函数;标准io库很多实现都以不可重入的方式使用全

学海无涯,回头是岸........ 6153

Unity3d实现红外热成像效果

1.将需要在红外图像中高亮的物体设置到图层PostProcessing。 2.新建一个相机CameraHighLight,设置其Culling Mask为PostProcessing,也就是在这个相机中只有PostProcessing图层的物体可见。 3.新建一个RenderTexture,命名为HightLightRt,将CameraHighLight的Target Texture设HightLightRt。 4.新建一个相机Camera2,这个相机用于显示其他物体。 接下来将CameraHigh

zouxin_88的专栏 8327

物联网开发笔记(34)- 使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

zhusongziye的博客 1万+

可重入函数与不可重入函数介绍

这个安全的函数又叫可重入函数,所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。可重入函数可以在任意时刻被中断, 稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时 保护自己的数据。可重入函数可以允许有该函数的多个副本在运行,由于不同任务使用的是分离的栈,所以不会互相干扰。它除了使用自己栈上的变量以外不依赖于任何环境(包括 static)

NRWHF的博客 1695

RK3588+TRL8367s四网口千兆交换机硬件调试与DTS配置实战

本文详细介绍了基于RK3588处理器与RTL8367S交换机芯片构建四网口千兆交换设备的硬件调试与DTS配置实战。文章深入对比了MDIO与SMI两种通讯方式的配置差异,提供了详尽的设备树代码示例,并总结了常见问题的排查思路,旨在帮助开发者高效完成嵌入式网络设备的软硬件集成与调试工作。

weixin_28308325的博客 468

详解可重入函数与不可重入函数

详解函数的可重入性;详解可重入函数和不可重入函数;如何设计可重入的函数。

物联网老王的博客,公众号同名 7614

从流体力学到深度学习:手把手教你用PINN预测涡流场(基于TensorFlow2.10+GPU)

本文详细介绍了如何利用物理信息神经网络(PINN)结合TensorFlow 2.10和GPU加速,预测Navier-Stokes方程的涡流场。通过核心原理讲解、实战环境配置、网络架构设计及物理约束实现,帮助读者掌握从流体力学到深度学习的跨学科技术应用,特别适合处理复杂流体问题和非定常流动场景。

weixin_29048309的博客 212

20、基于图神经网络的脱氢焓预测方法研究

本文研究了基于图神经网络(GNN)的液态有机氢载体(LOHC)材料脱氢焓预测方法。通过分析现有GNN方法的局限性,提出了一种新的聚合自节点表示(AWS)方法,并结合丰富的原子特征和集成学习策略,显著提高了预测性能。实验结果表明,AWS在脱氢焓预测和多个基准化学性质预测任务中均优于现有GNN方法。此外,基于分子结构的集成方法进一步提升了模型的鲁棒性和准确性。研究展示了该方法在筛选LOHC材料中的潜力,并为未来预测更多化学性质奠定了基础。

pp12345的博客 103

可重入函数 与 不可重入函数

文章摘要: 可重入函数具有数据独立性、无副作用和中断安全性,适用于多线程和中断环境;不可重入函数依赖共享资源,调用不可重入库函数,易导致数据混乱。可重入函数通过局部变量隔离调用,性能更优,减少同步开销;不可重入函数需额外同步机制,增加执行复杂度。判断标准包括是否调用malloc或标准I/O函数。优先使用可重入函数可提升程序并发安全性和效率。

祯的博客 1060

使用libVLC进行视频截图的C/C++实现

通过这些代码,你可以在C/C++应用程序中实现视频截图功能,并将视频帧保存为图像文件。请注意,本文只提供了基本的示例代码,你可以根据自己的需求进行扩展和修改。libVLC是一个强大的开源多媒体框架,可以用于在C/C++应用程序中处理和播放音频和视频文件。我们将展示如何初始化libVLC,打开视频文件,捕获视频帧并保存为图像文件。在开始编写代码之前,你需要包含libVLC的头文件,并链接相应的库文件。在链接阶段,你需要添加libVLC库的链接选项。在使用libVLC之前,你需要初始化libVLC的实例。

学习使你进步。 470

C++可重入函数和不可重入函数

C++可重入函数和不可重入函数 可重入函数是指能够被多个线程“同时”调用的函数,并且能保证函数结果正确不必担心数据错误的函数。 不可重入函数是指不能运行在多任务环境下,除非能保证互斥的函数。 由于使用了未受保护的系统资源,如全局变量区,中断向量表等。 不可重入函数在实时系统设计中被视为不安全函数。 可重入函数特点: 没有静态数据结构 不返回指向静态数据的指针 所有函数数据由函数的调用者提供 使用auto变量,或通过全局变量的拷贝来保护全局变量 若必须访问全局变量,则利用互斥信号保护 不调用不可重入函

kuanyew的博客 2412

定位教程0---定位初介绍

定位教程0---定位算子介绍

Quintin 1万+

DevExpress中使用BandGridView实现复合(多行)表头、设置多行表头背景颜色、表格边框颜色

一、实现效果 二、 实现方法 2.1、创建复合表头 ①将创建的GridControl下的GirdView1转化为BandGridView类型; ②创建需要展示的列(指定列的名称【Name】、描述【caption】、数据字段名称【FieldName】) ③绑定列实现复合表头。 注意:如果复合表头有多行,则需要设置新增Band的Row Count,然后设置【Band properties下的AutoFillDown=false】 详细操作如下: 注意:如果要隐藏表格的设计字段内容,则需.

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2893

可重入与不可重入函数的区别

关注、星标公众号,不错过精彩内容素材来源:网络编辑整理:strongerHuang一、什么是可重入函数与不可重入函数?可重入和不可重入函数主要用于多任务环境中,一个可重入的函数简单来说就...

strongerHuang 1147

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Linux中的可重入函数和不可重入函数

可重入函数 可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏。可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失。 可重入函数使用的变量有两种情况: 1.使用局部变量,变量保存在CPU寄存器中或者堆栈中; 2.使用全局变量,但是这时候要注意保护全局变量(防止任务中断后被其它任务改变变量)。

张勤一 6203

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

<<APUE>> 可重入函数 和不可重入

要熄灯断电了,明天考试,明天再修改 可重入函数 可重入函数(reentrant):在任意时刻可以被中断,稍后再继续运行,不会丢失数据,即不用担心数据被其他线程篡改。可重入函数必须满足以下三个条件: 可以在执行的过程中可以被打断; 被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered)。 再次调用执行完之后,被打断的上次调用可以继续恢复执行,并正确执行。 不可重入函数 多任务调用某一不可重入函数时,可能修改其他任务调用该函数的数据,从而导致不可预料的后果。 即不可重入函数

jiewaikexue的博客 868

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux:可重入函数与不可重入函数

可重入函数          一个函数在执行的过程中被打断,然后会再被从头执行一次,执行完后,再回来把刚才没执行完的部分执行完。这就相当于嵌套的执行了。函数是公共代码,这样的执行是允许的。函数的执行可以被打断,打断之后还可以再从头执行,执行完后接着执行刚才没有执行的代码,然后第一次执行的代码(被打断的函数)执行结果还是正确的。也就是说,这个函数执行,无论中间把这个函数再嵌入执行多少遍,怎么嵌入...

ENSHADOWER的博客 1096

不可重入函数Non-Reentrant & 可重入函数Reentrant

摘要:可重入函数和不可重入函数的本质区别在于是否依赖外部状态。可重入函数像自动售货机,执行过程被打断后仍能正确运行,因为它只使用参数和局部变量(如memcpy、write)。不可重入函数像手工记账本,依赖全局状态(如strtok用静态变量保存分割位置),一旦在信号处理或多线程中被重入就会数据错乱。关键差异在于:可重入函数不使用全局变量、共享资源,只进行原子操作;不可重入函数则相反。在信号处理和多线程编程中必须使用可重入函数,避免调用printf、malloc等不可重入函数,否则会导致内存泄漏或程序崩溃。

我的博客主要是用来给我自己复习的,主要是上传一些知识点,小型的项目和功能模块,如果有什么问题或错误麻烦联系我! 814
上一篇: 向上取整数学原理
下一篇: 【BitsButton-master】- 位域结构体
keepAlive_
博客等级 码龄3年 63粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值