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

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

今天看到一个新词汇:可重入。来总结一下。

可重入和线程安全有什么区别和联系呢?

  • 可重入
    可重入,就是指可以重复进入,不论是多个线程同时调用该函数,还是说函数在执行过程中遇见了中断,而中断处理中又调用了该函数。可重入就是指在这两种情况下,函数并不会产生错误的结果。
  • 线程安全
    线程安全是指,当其他线程运行时,函数不会产生错误的结果,不论其他线程运行的是该函数亦或是其他函数。

所以呢,线程安全和可重入并不是完全一样的概念,虽然有交集,但是可重入不一定线程安全,线程安全不一定可重入

比如,一个函数会读取一个全局变量,但是不会写入,并且读的过程没有加锁。那么这个函数就是可重入但是不是线程安全的。因为不论怎么调用这个函数,这个全局变量都不会变。但是当其他函数改变这个全局变量时,这个函数可能会产生超出预期的结果。

同样,一个函数会读取一个全局变量,但是不会写入,这次读的过程加锁了,那么这个函数就是线程安全但是不可重入的。因为在获取锁但是还未释放的时候,如果遇见了中断,就会产生死锁。

  • 线程安全条件
    • 不使用全局变量或者静态变量,或者使用时采用锁机制
    • 不调用线程不安全的函数
  • 可重入条件
    • 不使用全局变量或者静态变量,或者只读
    • 不调用不可重入的函数

所以一般而言,可重入函数的所有所需数据都是通过参数传递,并且尽量不使用指针。

(若有错漏,还望指摘)

转载地址:http://ntxzi.baihongyu.com/

你可能感兴趣的文章
编码转换
查看>>
freerice
查看>>
Does your mother know
查看>>
《写出质量好软件的75条体会》暨答案ZT [转自monkyy的blog]
查看>>
关于详细设计
查看>>
POJ2838,Sliding Window(单调队列)
查看>>
牛客练习赛50,B tokitsukaze and Hash Table(STL+输入输出挂)
查看>>
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>
洛谷P1638 逛画展(双向队列)
查看>>
牛客练习赛51,D(二分图匹配)
查看>>
POJ2892,Tunnel Warfare(线段树维护连续区间)
查看>>
POJ3468,A Simple Problem with Integers(线段树-区间查询-区间更新)
查看>>
快速幂(递归)
查看>>
CodeForces 1101A Minimum Integer(思维)
查看>>
CodeForces 1102A Integer Sequence Dividing(思维)
查看>>
CodeForces 1087B Div Times Mod(思维)
查看>>
杭电ACM——4310,Hero(贪心)
查看>>
杭电ACM——1789,Doing Homework Again(贪心)
查看>>
北大ACM——2782,Bin Packing(贪心)
查看>>