可重入函数详解

本文深入探讨了可重入和线程安全的概念,阐述了两者之间的联系与区别。线程安全是指在多线程环境下,代码能正确处理资源,避免数据不一致。可重入则关注函数在同一执行流中被调用时的正确性。文中列举了线程不安全和安全的情况,以及不可重入和可重入函数的实例,帮助读者理解这两个重要概念。
摘要由CSDN通过智能技术生成

目录

1 可重入VS线程安全

2 常见的线程不安全情况

3 常见的线程安全情况

4 常见的不可重入情况

5 常见的可重入情况

6 可重入与线程安全的联系

7 可重入与线程安全的区别


可重入VS线程安全

线程安全:多个线程并发同一段代码时,不会出现不同结果,常见对全局变量和静态变量进行操作,并且没有锁保护的情况下,会出现还问题。

重入:同一个函数被不同执行流调用,当前一个执行流还没执行完,就哟其他执行流再次进入,我们称之为重入,一个函数再重入的情况下,运行结果不会出现任何不同或任何问题,则该函数被称为可重入函数,否则为不可重入函数。

常见的线程不安全情况

  1.  不保护共享变量的函数
  2. 函数状态随着函数被调用,状态发生变化的函数
  3. 返回指向静态变量指针的函数
  4. 调用线程不安全函数的函数 

常见线程安全的情况 

  1. 每个线程对全局变量和静态变量只有只读权限,没有写权限,一般说来这些线程都是安全的
  2. 类或者结构对与线程来说都是原子性的
  3. 多个线程切换不会导致该结构的执行结果出现二义

常见的不可重入情况 

  1.  调用了malloc/free函数,因为malloc使用全局链表来管理的
  2. 调用了I/O库函数,因为标准库的很多实现都以不可重入的方式使用的全局变量
  3. 可重入函数体内使用了全局变量或静态变量

常见的可重入情况

  1.  不使用全局或静态变量
  2. 不使用malloc 或free开辟出来的空间
  3. 不调用不可重入函数
  4. 不返回静态或全局变量,所有的数据都有函数的调用这提供

可重入与线程安全的联系

  1.  函数时可重入的那就是线程安全的
  2. 函数是不可重入的,那就是多个线程共同使用,有可能引发线程安全问题
  3. 如果一个函数中有全局变量,那这个函数既不是线程安全的也不是可重入的

可重入与线程安全的区别

  1.  可重入函数是线程安全的一种
  2. 线程安全不一定可重入,但可重入一定线程一定线程安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值