可重入函数详解

目录

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. 线程安全不一定可重入,但可重入一定线程一定线程安全

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值