什么是可重入函数和不可不可函数函数呢?

【1】什么是可重入函数和不可重入函数?

可重入函数:一般存放在栈中,编译器可以随机分配和释放的函数称为可重入函数

不可重入函数:一般是指函数的返回值是静态类型,或者函数定义了静态变量或使用了全局变量,称为不可重入函数

【2】为什么要区分可重入函数和不可重入函数?

因为在多任务操作系统中中断函数可重入是什么中断函数可重入是什么,一个函数需要被多个任务同时调用,需要保证每个任务可以独立维护自己的栈空间或者内存寄存器中自己的值

【3】如何识别函数和不可重入函数?

/*This will either be
passed on the stack or in a CPU register. Either way is safe as
each task maintains its own stack and its own set of register
values. */

long int handler(int var1) { int var2; var2 = var1 + 2; return var2; } //可重入函数

 /* In this case lVar1 is a global variable so every task that calls
the function will be accessing the same single copy of the variable. */

long var1 long int handler(void) {
/* This variable is static so is not allocated on the stack. Each task
that calls the function will be accessing the same single copy of the
variable. */

static long state1 = 0; long 1Return; switch(state1) { case 0: 1Return = state1+10; state1 = 1; break; case 1: 1Return = state1+20; state1 = 0; break; } } //不可重入函数

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论