可重入函数和线程安全的区别与联系
来源:互联网 发布:彩影软件下载 编辑:程序博客网 时间:2024/06/05 20:51
什么是线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。反之,如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。
所以,有这么四类函数称为线程不安全的:
- 不保护共享变量的函数;
- 函数状态随着调用改变的函数;
- 返回指向静态变量指针的函数;
- 调用线程不安全函数的函数
什么是可重入函数:可重入函数是线程安全函数的一种,其特点在于它们被多个线程调用时,不会引用任何共享数据。函数是可重入(reentrant)的,是指对于相同的(并且合法的)函数参数(包括无参函数的情况),多次调用此函数产生的行为是可预期的,即函数的行为一致,或者结果相同。不能保证这一点的函数称为不可重入(non-reentrant)函数。
它又分为这么两种:
显式可重入函数:如果所有函数的参数都是传值传递的(没有指针),并且所有的数据引用都是本地的自动栈变量(也就是说没有引用静态或全局变量),那么函数就是显示可重入的,也就是说不管如何调用,我们都可断言它是可重入的。
隐式可重入函数:可重入函数中的一些参数是引用传递(使用了指针),也就是说,在调用线程小心地传递指向非共享数据的指针时,它才是可重入的。可见,可重入函数的可重入性是有时是调用者与被调用这共有的属性,并不只是被调用者的属性。
对比:
可重入和线程安全(Thread-Safe)是两个不同的概念:可重入函数一定是线程安全的;线程安全的函数可能是重入的,也可能是不重入的;线程不安全的函数一定是不可重入的。
可重入函数要解决的问题是,不在函数内部使用静态或全局数据,不返回静态或全局数据,也不调用不可重入函数。
线程安全函数要解决的问题是,多个线程调用函数时访问资源冲突。
函数如果使用静态变量,通过加锁后可以转成线程安全函数,但仍然有可能不是可重入的。
1 0
- 可重入函数和线程安全的区别与联系
- 可重入函数和线程安全的区别与联系
- 【Linux】可重入函数和线程安全的区别与联系
- 可重入函数与线程安全的区别和联系
- 线程安全和可重入函数的联系与区别
- 线程安全和可重入函数的区别与联系
- Linux--线程安全与可重入函数的区别和联系
- 可重入函数与线程安全的区别与联系
- 可重入函数与线程安全的区别与联系
- 可重入函数与线程安全之间的区别与联系
- 可重入函数与线程安全的区别与联系
- 可重入函数与线程安全的区别与联系
- 可重入函数与线程安全的区别与联系
- 线程安全与可重入函数的区别与联系
- 可重入函数与线程安全的区别与联系
- 可重入函数与线程安全的区别与联系
- 线程安全与可重入函数的区别与联系
- 线程安全和可重入函数的区别和联系
- Centos6.X下安装Eclipse
- tomcat get 中文乱码
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
- Java Calendar 类的时间操作
- Ubuntu 手机开发培训准备
- 可重入函数和线程安全的区别与联系
- 转:Maven常用命令
- Cpp环境【Usaco2.1.3】【Vijos1222】顺序排分数
- mac下 iterm2配色方案
- codeforces-57C Array(找规律+逆元)
- redis的pconnect解析
- zynq Nand flash,QSPI,EMMC接口
- HDU5726 GCD
- Android事件分发机制(三)事件分发和消费