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

【Linux】详细介绍Linux重入不可重入带例子

在Linux中,重入性指的是一个函数可以安全地在同时被多个线程或进程调用时正确地执行。不可重入性则表示一个函数在被并发调用时可能会导致不确定的行为或数据损坏。

不可重入

以下是一些示例:

  1. 静态变量:当函数使用静态变量时,可能会导致不可重入性。因为静态变量是在函数的整个生命周期内存在的,如果多个线程同时调用该函数,它们可能会修改或读取同一个静态变量,从而导致数据竞争和不一致的结果。
int not_reentrant()
{static int counter = 0;counter++;return counter;
}
  1. 全局变量:与静态变量类似,全局变量也可能导致不可重入性。多个线程同时访问全局变量时可能会引发竞争条件和数据不一致的问题。
int global_var = 0;int not_reentrant()
{global_var++;return global_var;
}
  1. 动态内存分配:当函数在堆上分配内存并返回指向该内存的指针时,如果多个线程同时调用该函数,它们可能会分配相同的内存地址,导致内存泄漏或访问冲突。
char* not_reentrant()
{char* buffer = malloc(sizeof(char) * 100);// 使用 buffer 进行操作return buffer;
}
  1. 使用全局或静态缓冲区:如果函数使用全局或静态缓冲区来存储中间结果,而多个线程同时调用该函数,并且函数会在缓冲区上进行写操作,可能会导致数据竞争和不可预测的结果。
char global_buffer[100];char* not_reentrant()
{// 使用 global_buffer 进行操作return global_buffer;
}

可重入

  • 不使用全局变量或静态变量
  • 不使用用malloc或者new开辟出的空间
  • 不调用不可重入函数
  • 不返回静态或全局数据,所有数据都有函数的调用者提供
  • 使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据

可重入与线程安全联系

  • 函数是可重入的,那就是线程安全的
  • 函数是不可重入的,那就不能由多个线程使用,有可能引发线程安全问题
  • 如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。

他们的区别

  • 可重入函数是线程安全函数的一种
  • 线程安全不一定是可重入的,而可重入函数则一定是线程安全的。
  • 如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。
http://www.lryc.cn/news/175090.html

相关文章:

  • 学术团体的机器人相关分会和机器人相关大赛的说明
  • C# 并发编程
  • 关于ClickHouse的表引擎和SQL操作
  • rust字符串
  • 解析-BeautifulSoup
  • C++:数组
  • 结合Mockjs与Bus事件总线搭建首页导航和左侧菜单
  • 模拟桌面自动整理, 先顶左,再顶上。
  • 新增MariaDB数据库管理、支持多版本MySQL数据库共存,1Panel开源面板v1.6.0发布
  • 【dbeaver】win环境的kerberos认证和Clouders集群中Kerberos认证使用Dbeaver连接Hive和Phoenix
  • MongoDB索引
  • ChatGPT的问世给哪些行业带来了冲击?
  • Elasticsearch:与多个 PDF 聊天 | LangChain Python 应用教程(免费 LLMs 和嵌入)
  • docker系列(7) - Dockerfile
  • Spring面试题8:面试官:说一说Spring的BeanFactory
  • Win10专业版系统一键重装怎么操作?
  • 十大服装店收银系统有哪些 好用的服装收银软件推荐
  • 算法通过村第八关-树(深度优先)白银笔记|深度和高度问题
  • Redis安装和使用
  • UML基础与应用之面向对象
  • 将 Ordinals 与比特币智能合约集成:第 2 部分
  • PCL 法线空间采样(C++详细过程版)
  • 论文阅读:AugGAN: Cross Domain Adaptation with GAN-based Data Augmentation
  • CNC 3D浮雕 Aspire 11.55 Crack
  • 【Clickhouse2022.02 查询优化】
  • PMP证书在国内已经泛滥了,还有含金量吗?
  • SolidJs节点级响应性
  • 数据采集技术在MES管理系统中的应用及效果
  • php函数usort使用方法
  • 35.浅谈贪心算法