看了好多文章,觉得这俩概念很容易混淆。在这里先总结一下自己的理解。 维基百科对可重入的定义是: 若一个程序或子程序可以“安全的被并行执行(Parallel computing)”,则称其为可重入(reentrant或re-entrant)的。 可重入的概念是在单线程操作系统的时代提出的。可重入会影响 ...
分类:
编程语言 时间:
2016-10-31 00:29:48
阅读次数:
204
这三个概念一直纠缠着我,我也时不时的会拿出来辨析下,直到昨天才发现自己可以把它们理顺了。所以学习就是这样一个反复的过程,最终达到顿悟的效果。本文主要参考APUE第三版英文版第10.6和12.5节,以及...
分类:
编程语言 时间:
2016-10-21 20:17:29
阅读次数:
411
最近经常听到这个名词,以前也听到过,不过接触更多的是“线程安全问题”,而且本人也一直理解的是两个名字的含义是一样的。今天仔细总结一下这个名词相关的概念。 引用博文:可重入函数和不可重入函数 (http://www.cppblog.com/franksunny/archive/2007/08/03/2 ...
分类:
其他好文 时间:
2016-10-18 18:35:43
阅读次数:
216
摘要 从使用场景的角度出发来介绍对ReentrantLock的使用,相对来说容易理解一些。 场景1:如果发现该操作已经在执行中则不再执行(有状态执行) if (lock.tryLock()) { //如果已经被lock,则立即返回false不会等待,达到忽略操作的效果 a、用在定时任务时,如果任务执 ...
分类:
其他好文 时间:
2016-10-08 13:59:23
阅读次数:
111
重入一般可以理解为一个函数在同时多次调用,例如操作系统在进程调度过程中,或者单片机、处理器等的中断的时候会发生重入的现象。 一般浮点运算都是由专门的硬件来完成,举个例子假设有个硬件寄存器名字叫做FLOAT,用来计算和存放浮点数的中间运算结果 假设有这么个函数 void fun() { //...这个 ...
分类:
其他好文 时间:
2016-10-05 21:53:55
阅读次数:
150
如何实现可重入?首先锁信息(指redis中lockKey关联的value值)必须得设计的能负载更多信息,之前non-reentrant时value直接就是一个超时时间,但是要实现可重入单超时时间是不够的,必须要标识锁是被谁持有的,也就是说要标识分布式环境中的线程,还要记录锁被入了多少次。如何在..
分类:
编程语言 时间:
2016-10-04 08:10:47
阅读次数:
547
本文转载自: http://www.blogfshare.com/kernel-synchronization.html 1.在支持多线程的操作系统下,有些函数会出现不可重入的现象。所谓“可重入”是指函数的执行结果不和执行顺序有关。反之如果执行结果和执行顺序有关,则称这个函数是“不可重入”的。 2. ...
分类:
其他好文 时间:
2016-09-30 12:14:14
阅读次数:
328
Java提供了强制原子性的内部锁机制:synchronized块。但是内部锁是可重入的,当线程试图获得它自己占有的锁时,请求会成功。 简单的说,就是在一个synchronized方法内部调用本类的其他synchronized方法时,永远可以拿到锁。 如例子1.1所示 [java] view plai ...
分类:
编程语言 时间:
2016-09-21 13:02:30
阅读次数:
190
线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。我们定义四类(有相交的)线程不安全函数。 第1类:不保护共享变量的函数 将这类线程不安全函数变为... ...
分类:
编程语言 时间:
2016-09-05 21:01:35
阅读次数:
176
可重入与线程安全 在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。 大多数c++类天生就是可 ...
分类:
编程语言 时间:
2016-09-04 06:51:10
阅读次数:
235