9.6 可重入函数
多任务带来的问题
函数sum()被任务task1调用
在调用过程中,任务task1挂起
调度器运行task2
函数sum()被任务task2再次调用
可重入函数
可重复调用、并发调用、可以被中断
在多任务环境中,多次调用,不影响运行结果
一般应用在多任务、多进程的运行环境中
不可重入函数的标志
函数内部使用了全局变量、静态局部变量
函数返回全局变量或静态局部变量
函数内部使用了malloc/free函数
函数内部使用了标准I/O函数
函数内部调用了其它不可重入函数
可重入函数设计
应用场合
多任务环境、该函数可能被多次调用
该函数在执行过程中可能会被中断、任务调度打断
设计原则
不使用/返回静态变量、全局变量
不使用标准I/O函数
不使用malloc/free函数
不调用不可重入函数
在中断函数中尽量不调用不可重入函数
C标准库函数
第三方库、框架接口函数
操作系统的API函数
自定义函数