C语言之不可重入函数与可重入函数

1. 可重入函数和不可重入函数的定义

可重入函数:可以被多个任务同时调用的函数,不会导致数据错误或内存泄漏等问题。

  • 不可重入函数:在多个任务同时调用时可能会修改其他任务的数据,从而导致不可预测的结果。

2. 可重入函数的特点

使用局部变量或受保护的全局变量

  • 不修改其他任务的数据

3. 不可重入函数的特点

使用未受保护的全局变量或静态变量

  • 可以被多个任务同时访问和修改

4. 常见的不可重入函数

字符串处理函数:strcpy、strcat、strstr 等

  • 标准库函数:fopen、fclose、fread、fwrite 等

5. 注意使用不可重入函数

避免多个任务同时调用

  • 避免数据错误或内存泄漏等问题

这里举一个简单的例子来说明可重入函数和不可重入函数。

首先,我们定义一个可重入的函数 add,它接受两个参数并返回它们的和:

#include <stdio.h>
int add(int a, int b) {  
   return a + b;  
}

接下来,我们定义一个不可重入的函数 swap,它接受两个参数并交换它们的值。这个函数是不可重入的,因为它使用了未受保护的全局变量:

#include <stdio.h>
int swap(int *a, int *b) {  
   int temp = *a;  
   *a = *b;  
   *b = temp;  
   return 0;  
}

现在我们创建两个任务,任务 1 和任务 2,它们同时调用这两个函数:

#include <stdio.h>  
#include <pthread.h>
int main() {  
   pthread_t thread1, thread2;  
   int result1, result2;
   pthread_create(&thread1, NULL, (void *)add, NULL);  
   pthread_create(&thread2, NULL, (void *)swap, NULL);
   pthread_join(thread1, &result1);  
   pthread_join(thread2, &result2);
   printf("任务 1 的结果:%d\n", result1);  
   printf("任务 2 的结果:%d\n", result2);
   return 0;  
}

当程序运行时,任务 1 和任务 2 会同时执行。由于 add 函数是可重入的,所以两个任务可以同时调用 add 函数,不会相互影响。而 swap 函数是不可重入的,所以当任务 1 和任务 2 同时调用 swap 函数时,它们会互相修改对方传入的指针变量的值,导致不可预测的结果。
注意,这里只是为了说明可重入和不可重入函数的概念,实际应用中需要避免使用不可重入函数,以确保多任务环境下程序的正确性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值