一、线程安全

如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 
  或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
  线程安全问题都是由全局变量及静态变量引起的。
  若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

二、可重入函数

可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。

可重入函数不为连续的调用持有静态数据;不返回指向静态数据的指针;所有数据都由函数的调用者提供;使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。绝不调用任何不可重入函数。

三、两者的区别与联系

函数可以是可重入的,是线程安全的,或者二者皆是,或者二者皆非。不可重入的函数不能由多个线程使用。另外,或许不可能让某个不可重入的函数是线程安全的。

   1、可重入函数是线程安全函数的一种,其特点在于它们被多个线程调用时,不会引用任何共享数据。

可重入函数与线程安全的区别与联系:

  2、线程安全是在多个线程情况下引发的,而可重入函数可以在只有一个线程的情况下来说。

  3、线程安全不一定是可重入的,而可重入函数则一定是线程安全的。

  4、如果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。

  5.如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。

  6、线程安全函数能够使不同的线程访问同一块地址空间,而可重入函数要求不同的执行流对数据的操作互不影响使结果是相同的。

转载于:https://blog.51cto.com/11451519/1829344

线程安全与可重入函数的区别及联系相关推荐

  1. 线程安全与可重入函数的区别与联系

    线程安全 线程安全是多个线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取结束并且释放了锁,其他线程才可使用,保证了数据的一致性. 与之对应的则是 ...

  2. 线程安全与可重入函数

    线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果.如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe ...

  3. [Linux]线程安全和可重入函数

    线程安全:一个函数被称为线程安全的,当且仅当被多个并发进程反复调用时,它会一直产生正确的结果.如果一个函数不是线程安全的,我们就说它是线程不安全的. 重入:函数被不同的控制流程调用,有可能在第一次调用 ...

  4. 线程安全和可重入函数的联系与区别

    1.    线程安全: 线程安全是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程访问完,其他线程才可以使用.不会出现数据不一致或数据污染. 线程 ...

  5. 线程安全和可重入函数

    先说结论 可重入函数未必是线程安全的:线程安全函数未必是可重入的. 可重入函数的概念 可重入的程序(函数)允许在执行的过程中被打断,并在打断所执行的代码中再次安全的调用.重点在于安全,不允许程序挂掉. ...

  6. 14.线程安全?线程不安全?可重入函数?不可重入函数?

    线程安全问题 基本定义 线程安全:简单来说线程安全就是多个线程并发执行同一段代码时,不会出现不同的结果,我们就可以说该线程是安全的: 线程不安全:如果多线程并发执行时会产生不同的结果,则该线程就是不安 ...

  7. 可重入函数 与线程安全的区别与联系

    线程安全:多个线程访问同一个区域的时候其最终结果是可预期的,并不会因为产生冲突或者异常中断再次恢复而使结果不可预期 1.重入:函数被不同的控制流程调用,有可能在第一次调用还没有返回的时候就再次进入该函 ...

  8. 可重入函数与线程安全的区别与联系

    本文主要介绍一下可重入函数与线程安全的区别与联系,在此之前我们先来了解一些基本概念:什么是线程全函数,什么是可重入函数? 线程安全函数 概念 线程安全的概念比较直观,一般来说,一个函数被称为线程安全的 ...

  9. Linux中的可重入函数和不可重入函数

    可重入函数 可重入函数(即可以被中断的函数)可以被一个以上的任务调用,而不担心数据破坏.可重入函数在任何时候都可以被中断,而一段时间之后又可以恢复运行,而相应的数据不会破坏或者丢失. 可重入函数使用的 ...

最新文章

  1. 肏蛋的Loadrunner脚本
  2. C语言复杂的学生成绩管理系统,哭诉、拜求C语言学生成绩管理系统
  3. 解决springboot配置jackson.date-format不生效的问题
  4. 万户OA应变大考验之新员工学习篇
  5. SAP S4HANA的product搜索的动态SQL语句的拼接原理
  6. “约见”面试官系列之常见面试题第二十篇之vuex得理解(建议收藏)
  7. java的property配置文件的用法
  8. Linux系统中常用操作命令
  9. 从内部重启python脚本
  10. Leetcode每日一题:42.trapping-rain-water(接雨水)
  11. 区块链支付平台技术的应用
  12. 深入理解asp.net里的IHttpHandler
  13. 这里有几位数据分析方向的大佬
  14. idea插件JRebel激活
  15. Markdown中数学相关
  16. maven项目中 org.hibernate.MappingNotFoundException: resource:**.hbm.xml not found问题的解决方案
  17. 用手机APP来养一盆绿植,这个黑科技智能花盆实在是太炫酷 | 钛空舱
  18. python统计分析书籍_Python数据分析入门书籍推荐
  19. 中国独立开发者生存到底有多艰难?
  20. 证件怎么扫描?手机即可扫描

热门文章

  1. Windows 11正式版将于10月5日推出,说好的支持安卓App没上车
  2. 国产期刊崛起!上海大学、郑州大学主办期刊IF超15,2021版SCI期刊影响因子出炉...
  3. 简单点,让论文写作简单点,老牌名校助理教授给出8个建议
  4. 哈佛新研究登上Science封面:这个机械外骨骼,是一条“轻功”短裤
  5. null in JavaScript
  6. 项目管理理论与实践(4)——UML应用(上)
  7. 现代软件工程 第七章 【MSF】练习与讨论
  8. JQuery 表单校验插件 validate 使用纪录
  9. 网摘精灵教程:网摘自动提交工具。
  10. 吉他谱——再回首pic