当前位置: 首页 > news >正文

linux多线程之可重入函数

目录

定义

特点

不可重入函数示例

可重入函数示例

访问共享资源的可重入函数示例


定义

        可重入函数是指可以被多个线程或进程同时调用,且在调用过程中被中断,然后再次调用,不会出现错误的函数。即使在这些并发调用的情况下,函数每次执行都能产生正确的结果。

特点

  1. 不依赖共享的静态或全局变量:可重入函数不使用静态或全局变量来保存中间状态。因为如果多个线程同时调用使用了共享静态或全局变量的函数,可能会导致数据竞争。
  2. 不调用不可重入的函数:如果一个函数调用了不可重入的函数,那么它本身也不是可重入的。例如,标准 C 库中的 strtok 函数不是可重入的,因为它使用静态变量来保存内部状态。如果在可重入函数中调用 strtok,就会破坏可重入性。而 strtok_r 是 strtok 的可重入版本,可以在可重入函数中使用。
  3. 对共享资源的访问是线程安全的:如果函数需要访问共享资源(如文件、设备等),它必须使用同步机制(如互斥锁、信号量等)来确保对共享资源的访问是线程安全的。

不可重入函数示例

int count = 0;
int non_reentrant_function() {count++;return count;
}

        在多线程环境下,不同线程调用 non_reentrant_function 时,count 的值会因为并发访问而变得不可预测。

可重入函数示例

int reentrant_function(int num) {int local_count = 0;local_count += num;return local_count;
}

每个线程调用 reentrant_function 时,local_count 都是独立的,不会相互干扰。

访问共享资源的可重入函数示例

#include <stdio.h>
#include <pthread.h>pthread_mutex_t file_mutex = PTHREAD_MUTEX_INITIALIZER;void reentrant_file_write(const char *data) {pthread_mutex_lock(&file_mutex);FILE *file = fopen("test.txt", "a");if (file) {fputs(data, file);fclose(file);}pthread_mutex_unlock(&file_mutex);
}

        这里使用互斥锁 file_mutex 来保护对文件的访问,确保多个线程不会同时写入文件,从而保证了函数的可重入性。

http://www.dtcms.com/a/251017.html

相关文章:

  • 面经的疑难杂症
  • Proteus8.17仿真51单片机驱动ST7920 LCD12864
  • vue2中setTimeout中调用methods方法问题
  • 基于51单片机的智能小车:按键调速、障碍跟踪、红外循迹与数码管显示(一个合格的单片机课设)
  • Elasticsearch9 + 通义大模型实现语义检索操作详解
  • Qt3d中的材质--PBR材质
  • Android 修改了页面的xml布局,使用了databinding,这时候编译时需要用到apt吗
  • chapter06-针对分类的微调
  • k8s-pod-01的学习
  • ROS2中,在工作空间根目录下执行source ./install/setup.bash的作用?
  • Lighthouse与首屏优化
  • Linux下的MySQL从DDL到DQL的基础操作
  • YSYX学习记录(九)
  • Python打卡第54天
  • 使用存储型 XSS 窃取 cookie 并发送到你控制的服务器
  • 【JS-2】JavaScript基础语法完全指南:从入门到精通
  • 【小沐杂货铺】基于Babylon.JS绘制三维数字地球Earth(GIS 、WebGL、vue、react,提供全部源代码)
  • Java学习笔记——lambda表达式
  • LangGraph--设计一个给出标准提示词模板的聊天机器人
  • 【MySQL】TencentOS 安装登录MySQL
  • 如何通过 noindex 阻止网页被搜索引擎编入索引?
  • 土建施工安全管理难?免费AI系统 24h 监控预警
  • 疗愈经济崛起:如何把“情绪价值”转化为医疗健康产品?
  • 【JavaEE】(2) 多线程1
  • nlp和大模型
  • 大语言模型:提示词决定自我反思效果: “检查回答是否错误” “验证回答是否正确”
  • EXCEL破解VBA密码 ( 仅供学习研究使用)
  • 多模态大语言模型arxiv论文略读(122)
  • 期权入门介绍
  • 基于CNN深度学习的小程序识别-视频介绍下自取