线程安全和可重入函数

线程安全和可重入函数的对比 可重入函数  可重入函数简单也就相当于可以被中断的函数,即一个函数正在执行的过程中被其他函数或操作中断出去,在这个中断操作执行完毕后,再返回来执行原代码。     那么如果这个中断出去的函数对i进行操作呢?   假设这个中断函数对i直接进行加9,那么在中断函数返回之后i=9,sum只进行一次+=操作,但是原先的预期是从0+到9,所以跟我们的预期结果有很大的差异。   所以对于可重入函数要进行对 阅读详情

一、线程安全
1、什么是线程安全?
如果一个进程中有多个线程在同时运行,这些线程可能会同时运行同一段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就表示线程是安全的。
线程安全问题是由全局变量和静态变量引起的。
2、如何避免线程安全问题
(1)使用线程安全的类
(2)使用synchronized同步代码块,或者用Lock锁
(3)多线程并发情况下,线程共享的变量改为方法局部级
变量
二、可重入函数
1、什么叫可重入函数?
信号的捕捉可以让进程内部有多种执行流,被两个或者多个执行流进入同一个函数叫做重入。若因为重入的原因导致函数的结果出错,则该函数叫做不可重入函数。
2、不可重入函数
(1)调用了malloc或者free,因为malloc和free是用全局链表来管理堆的;
(2)调用了标准I/O库函数,标准I/O库的实现很多都以不可重入的方式使用全局数据结构;
(3)某些被规定用线程安全的方式实现的函数;
(4)函数体内使用了静态变量;
(5)函数返回静态变量或者静态的数据结构;
(6)函数调用了不可重入函数。
3、可重入函数
(1)不使用全局或者静态变量;
(2)不返回指向静态数据的指针,所有数据都由函数调用者来提供;
(3)使用本地数据,或通过制作全局数据的本地拷贝来保护全局数据;
(4)不调用不可重入函数。
4、可重入函数的特点
(1)可重入函数可以被多个任务同时调用,而不担心数据会被破坏;
(2)可重入函数在任何时刻都可以被中断,一段时间之后又可以返回到中断之前的状态,而不担心数据会丢失;
(3)可重入函数若要使用全局变量,则要对全局变量进行保护。
三、对比线程安全和可重入函数
1、可重入的函数一定是线程安全的函数;
2、线程安全的函数不一定是可重入函数;
3、可重入性强于线程安全性。

华为防火墙——本地Portal认证 配置IP地址、路由、Nat策略使得内网主机可以访问公网服务器对网段不进行认证,对网段进行portal认证。 阅读详情

相关推荐

2024银行科技岗笔试通关秘籍:从资料准备到实战技巧

本文系统解析了2024年银行科技岗笔试的考察内容与备考策略。文章指出,笔试是一场涵盖通用能力测试、计算机专业基础、金融科技知识和英语性格测试的复合型考试,并重点提供了数据结构与算法、计算机网络、数据库等高频考点的深度解析与实战突破技巧,帮助考生高效准备,顺利通关。

weixin_29243279的博客 122

可重入函数与线程安全

 一、概念 线程安全(Thread-Safe):被多个并发的线程反复调用时,他会产生正确的结果。 可重入(Reentrant):当被多个线程调用的时候,不会引用任何共享数据。       任何线程不安全问题的根源都是“共享数据”。所以,不使用任何共享数据的函数(即:可重入函数)肯定是线程安全的。但这并不等于说,线程安全函数就是可重入函数。可重入和线程

her的博客 819

ENVI新手避坑指南:手把手教你搞定遥感影像的坐标系转换(附ArcGIS对比)

本文详细解析ENVI与ArcGIS在遥感影像坐标系转换中的关键差异与实战技巧,特别针对新手常见问题提供避坑指南。从基础概念到高级操作,涵盖定义投影、UTM转换等核心步骤,并对比两种软件的处理精度与效率,帮助用户高效完成遥感影像处理任务。

weixin_42531925的博客 378

线程安全与可重入总结

总结: ①可重入函数一定是线程安全的; ②可以通过加锁将不可重入函数变成线程安全的; ③线程安全的函数不一定是可重入的; 解释: 根据正常情况,当一个信号发生时,如果进程并没有对该信号进行屏蔽,信号 可能在任意时候打断一个进程的任意一个线程而执行。 一个函数可以是可重入的,也可以是线程安全的,也可以两者都是,或者两者都不是。 1、可重入函数:相对于信号而言,如果该函数A1正在执行过程

HN_gsf的博客 970

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例)

本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。

weixin_30336061的博客 311

爬取百度图片

最开始,我们想要爬取图片,首先需要打开百度图库,然后在搜索栏中输入自己想要的图片(比如说壁纸)。接着右键检查,点击网络:起初可能没有名称信息,刷新界面就可以了。打开信息,查看标头内容可以看到请求URL为:复制这串URL,然后在浏览器中打开这个就是我们搜索的壁纸图片的网页内容。怎么找到图片的URL呢?在上述内容中,找到data,可以发现里面每隔一个aiEditData,下面代码的形式是一样的,就相当于一张图片。

weixin_54143563的博客 1942

可重入函数和线程安全函数的区别

可重入函数:一个函数可以在任意执行流中调用,都不会出问题。 线程安全函数:一个函数在任意线程中调用,都不会有问题。 区别: 可重入包含更高,覆盖了线程安全。 如果一个函数是可重入函数,一定是线程安全的;一个函数线程安全,不一定可重入函数。 代码示例: #include <stdio.h> #include<pthread.h> //头文件 #include...

陌上人如玉,公子世无双。 531

python全栈入门到实战【基础篇 02】环境搭建:Python解释器与PyCharm、VSCode编辑器安装配置详解

本文详解Python环境搭建步骤。首先安装解释器(运行代码核心),需从官网下载,选3.8及以上版本(勿选2.x)。Windows安装必勾“Add Python.exe to PATH”,验证用`python --version`;Mac选universal2安装包,验证用`python3 --version`。 编辑器二选一:PyCharm社区版(免费,新手推荐),安装后需配置解释器路径;VSCode轻量,需装Python插件并选择解释器。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 5万+

对比线程安全和可重入函数

线程安全与可重入函数

rushing的博客 300

Windows2008使用-解决漏洞-CVE-2010-2730

随着硬件的升级,操作系统也逐渐进行了版本更新。目前阶段,Windows2016Server、Windows2022Server逐渐成为了以Windows系列的服务器平台系统。对于有些应用而言,由于其业务的固定,可能仍只能运行在Windows2008Server或者Windows2012Server上。有时候我们为安全需要,需要将相关的操作系统涉及的漏洞做修复。最近碰到在一个Windows2008R2 的操作系统漏洞CVE-2010-2730,一顿操作,终于找到了合适的方案,这里分享给大家。

mystonelxj的博客 2314

SPI为什么不需要加上拉电阻

大家好,我是记得诚。I2C因为其开漏的结构,无法输出高电平,所以外部加上拉电阻。我们在使用SPI的时候,发现是不需要加上拉电阻的。主要因为SPI多为推挽的结构,推挽电路,高低电平都可以输出,所以外部不需要加上拉电阻。推挽电路可以用2个三极管或者2个MOS管搭建而成。

记得诚 2628

线程安全函数和可重入函数的区别

线程安全: 线程安全函数:在C语言中局部变量是在栈中分配的,任何未使用静态数据或其他共享资源的函数都是线程安全的。 使用全局变量的函数是非线程安全的。 使用静态数据或其他共享资源的函数,必须通过加锁的方式来使函数实现线程安全。 线程安全的(Thread-Safe): 如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。 ...

肖邦的夜曲的专栏 1306

可重入函数和线程安全函数

线程安全函数  • 概念:  线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。  • 确保线程安全:  要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄 存器。因此,对于同一进程的不同线程来说,每个线程的局部变量都是私有的,而

crazy_programmer_p的专栏 733

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

可重入函数与线程安全的区别和联系

1.关于可重入函数 当捕捉到信号时,不论进程的主控制流程当前执行到哪,都会先跳到信号处理函数中执行,从信号处理函数返回后再继续执行主控制流程。信号处理函数是一个单独的控制流程,因为它和主控制流程是异步的,二者不存在调用和被调用的关系,并且使用不同的堆栈空间。引入了信号处理函数使得整个进程具有多个控制流程,如果这些控制流程访问相同的全局资源(全局变量、硬件资源等),就有可能出现冲突。 可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它

tugouxp的专栏 403

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

可重入函数和线程安全

可重入函数和线程安全 可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的。 可重入函数也可以这样理解,重入即表示重复进入,首先它意味着这个函数可以被中断,其次意味着它除了使用自己栈上的变量以外不依赖于任何环境(包括s

weixin_41528527的博客 276

线程安全函数和可重入函数

线程安全函数和可再入函数 3.1线程安全函数 (1)概念 线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。  (2) 确保线程安全 要确保函数线程安全,主要需要考虑 的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄 存器。因此,对于同一进程的不同线程来说,

Ronux的专栏 1289

【Linux】线程安全和可重入函数

线程安全 所谓线程安全,就是当多个线程访问同一个数据时,不会造成数据出错。其实它是采用了加锁的机制来保证在一个线程访问该数据时,其他的线程不可以访问,直到等到那个线程访问结束才可以访问。而线程不安全,就是没有采用加锁的机制来保证这一点。 测试代码 #include #include int g_count = 0; void* threadCount(void* arg) { int

皓皓松的博客 856

深入理解可重入和线程安全函数的区别

转自:http://blog.youkuaiyun.com/scenlyf/article/details/52074444 版权声明:本文为博主原创文章,未经博主允许不得转载。 *****可重入函数       函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入。       当程序运行到某一个函数的时候,可能因为硬件中断或者异常而使得在用户正在执行的代码暂时终端转而进入你内核,这个时候如有一个信号需要被处理,而处理的.

weixin_43277501的博客 242

线程安全和可重入函数的区别和联系

一. 可重入函数       函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入。       当程序运行到某一个函数的时候,可能因为硬件中断或者异常而使得在用户正在执行的代码暂时终端转而进入你内核,这个时候如有一个信号需要被处理,而处理的这个信号的时候又会重新调用刚才中断的函数,如果函数内部有一个全局变量需要被操作,那么,当信号处理完成之后重新返回

lmh的博客 288
上一篇: 守护进程
下一篇: 子进程的异步等待方式
LP9127
博客等级 码龄11年 15粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值