博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可重入和线程安全
阅读量:6971 次
发布时间:2019-06-27

本文共 645 字,大约阅读时间需要 2 分钟。

1 定义

(1)线程安全:多个线程同时运行一段代码,不会造成资源的冲突,不会产生错误的结果,那么这段代码是线程安全的。

(2)可重入:多个执行流反复执行一段代码,其结果不会发生改变。

2 条件

(1)常见线程安全满足的条件:

  • 只读全局变量或静态变量
  • 保护共享资源
  • 调用线程安全的函数

2)常见可重入函数满足的条件:

  • 只读全局变量或静态变量
  • 不操作共享资源
  • 不调用不可重入函数
  • 不调用malloc/free函数
  • 不调用标准I/O函数

3 区别

可重入的函数必定是线程安全的,而线程安全的函数不一定是可重入的,其关系如下图所示:

 

那么要理解这两者的区别,就在于举出一些“可重入但不是线程安全”的例子,仅仅是通过文字定义的描述很容易混淆。从定义上看,线程安全是多线程同时执行同一个函数,而可重入则是多个执行流,这是理解其区别的重点。例如有以下代码:

pthread_mutex_t mut;

 

int function()

{

pthread_mutex_lock(&mut);

 

...   //执行流

 

pthread_mutex_unlock(&mut);

}

这个函数中加入了互斥锁的保护机制,可见是可以被多个线程同时调用的,是线程安全的。但是如果程序执行到执行流中时,此时产生了中断,OS转向中断函数中,而在中断函数中又调用了此函数,那么就会产生死锁,由此看来,此函数是不可重入的。

转载于:https://www.cnblogs.com/fangyan5218/p/10618332.html

你可能感兴趣的文章
回调函数c++
查看>>
【Python】opencv显示图像
查看>>
c# datetime用法总结
查看>>
从父作用域继承变量
查看>>
11、【转载】深刻理解Python中的元类(metaclass)(深度好文)
查看>>
第42届亚洲区域赛青岛站(2017icpc青岛)经验总结以及一些感想
查看>>
树状数组 Playrix Codescapes Cup (Codeforces Round #413, rated, Div. 1 + Div. 2) C. Fountains
查看>>
通过web界面查看hadoop集群运行日志的地址
查看>>
python基础数据型初探
查看>>
bzoj3489: A simple rmq problem (主席树)
查看>>
《IT人生需要指引》读后感(学生作业分享)
查看>>
手抖删掉mysql的生产库,一定要跑路么?
查看>>
【桌面虚拟化】之三 Persistent vs NonP
查看>>
演示:思科设备基于物理接口帧中继(fame-relay)的配置
查看>>
非字段校验器配置风格
查看>>
php安全
查看>>
Hugepages你用了吗?--测试案例篇
查看>>
Windows Server 2016-抢占FSMO角色
查看>>
实战Puppet 集中配置管理系统(2)——apache与nginx模块配置
查看>>
运维网络监控iftop
查看>>