可重入函数与线程安全

本文详细介绍了可重入函数的概念及其确保可重入的必要条件,包括不使用静态和全局数据、避免调用malloc等。同时,探讨了线程安全的定义,强调可重入函数一定是线程安全的,但线程安全函数不一定是可重入的。重点讨论了两者之间的关系,并指出可重入函数在效率上的优势。
摘要由CSDN通过智能技术生成

重入:当不同的控制流程调用同一个函数时,有可能当一个调用还没返回时,另一个调用就进入了该函数,将其称作重入;

不可重入函数:当一个函数由于可重入出错,则将此函数称为不可重入函数;

可重入函数:当一个函数由于可重入而不影响各自流程的正确结果(其只访问自己的局部变量和参数),将此函数称作可重入函数;

举例:常见情况中,当程序正在执行到某一个函数中的某一条指令时,这时其收到了一个信号,于是其暂停执行去处理信号,执行此信号的处理动作,而这个信号处理动作的函数正好为刚刚执行到函数,于是就对此函数造成了可重入,而当信号处理动作执行此函数正确运行,程序返回时之前暂停执行的此函数也能正确运行,则将此函数称为可重入函数。

注意:重入前提条件是不同的控制流程访问同一个函数,而信号处理函数和main函数正是使用不同的堆栈空间,它们之间不存在调用和被调用的关系,就是两个独立的控制流程。

确保可重入函数的必要条件如下:

(1)不在函数内部使用静态和全局数据(由于进程不同的控制流程访问共享数据会造成数据错乱);

(2)不调用malloc或free,因为ma

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值