可重入和非可重入函数

要解释可重入函数是何物必须先分清楚单线程程序和多线程程序,典型的UNIX程序都是一个线程贯穿程序始终,cpu围绕单条执行逻辑来处理,对于多线程程序则是,同一进程却存在多条独立并发的执行逻辑。

信号处理器函数因为使用了信号处理器函数可能会在任一时间点异步中断程序的执行逻辑,从而在同一进程中存在两条(即主程序和信号处理函数)独立(但不是并发)的执行线程。

可重入函数:
如果同一程序的多个线程可以同时安全的调用某一个函数,那么该函数就是可重入函数。
此处“安全”的意思是,其他线程无论调用该函数的状态如何都可产生预期结果
不可重入函数:
如果在同一个程序中多个线程不能够安全的调用某一个函数,那么这个函数就是不可重入函数

更新全局变量或者静态数据结构可能是不可重入函数

malloc函数族为不可重入函数,因为malloc和free函数维护了一个针对以释放内存块的链表,如果重新在堆上分配内存可能破坏链表结构

printf,scanf也为不可重入函数,因为他们会为缓冲区I/O更新数据结构

欢迎关注问我团队公众号:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值