9.6 可重入函数

9.6 可重入函数

多任务带来的问题

函数sum()被任务task1调用
在调用过程中,任务task1挂起
调度器运行task2
函数sum()被任务task2再次调用

可重入函数

可重复调用、并发调用、可以被中断
在多任务环境中,多次调用,不影响运行结果
一般应用在多任务、多进程的运行环境中

不可重入函数的标志

函数内部使用了全局变量、静态局部变量
函数返回全局变量或静态局部变量
函数内部使用了malloc/free函数
函数内部使用了标准I/O函数
函数内部调用了其它不可重入函数

可重入函数设计

应用场合

多任务环境、该函数可能被多次调用
该函数在执行过程中可能会被中断、任务调度打断

设计原则

不使用/返回静态变量、全局变量
不使用标准I/O函数
不使用malloc/free函数
不调用不可重入函数

在中断函数中尽量不调用不可重入函数

C标准库函数
第三方库、框架接口函数
操作系统的API函数
自定义函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值