可重入函数 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料的后果。那么什么是可重入函数呢?所谓可重入是指一个可以被多个任务调用的过程,任务在调用时不必担心数据 ...
分类:
编程语言 时间:
2018-07-03 14:59:44
阅读次数:
162
1.定义 重入锁ReentrantLock,支持重入的锁,表示一个线程对资源的重复加锁。 2.底层实现 每个锁关联一个线程持有者和计数器,当计数器为0时表示该锁没有被任何线程持有,那么任何线程都可能获得该锁而调用相应的方法;成功后,JVM会记下锁的持有线程,并且将计数器置为1;此时其它线程请求该锁, ...
分类:
编程语言 时间:
2018-06-29 20:39:28
阅读次数:
210
回顾 -------------- 1、并发库下的重入锁 相较于synchronized来讲,cpu资源消耗少。粒度更细,可以控制到共享读锁和 独占写锁,底层实现Unsafe对数字的控制实现,这些数字控制都是原子量实现。 原子量底层控制实现原理是CAS(CompareAndSwap,比较并交换,反复... ...
分类:
编程语言 时间:
2018-06-25 17:54:40
阅读次数:
218
可重入锁指的是在同一个thread中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁。它是基于thread粒度的,per-thread。不可重入锁指的是每次使用锁方法时,都需要重新获取锁,即使在同一线程中调用同一方法都需要等待上一个锁的释放。它是基于method粒度的,per-invocation。可重入锁与不可重复锁的例子//设计一个锁publicclassLoc
分类:
其他好文 时间:
2018-06-25 17:02:25
阅读次数:
195
本篇文章将介绍两种自己动手实现可重入锁的方法。 我们都知道JDK中提供了一个类 ,利用这个类我们可以实现一个可重入锁,这种锁相对于 来说是一种轻量级锁。 重入锁的概念 重入锁实际上指的就是一个线程在没有释放锁的情况下,可以多次进入加锁的代码块。 这种情况下,如果我们加的锁不是支持可重入的锁,那么b方 ...
分类:
其他好文 时间:
2018-06-25 01:20:14
阅读次数:
275
1.malloc,free, printf均是不可重入函数(意味不能在中断函数或信号处理函数同时调用),但是线程安全函数(意味它可以被多个线程调用) 2.函数有static变量或者全局变量,则该函数是不可重入函数 满足下面条件之一的多数是不可重入函数: (1)使用了静态数据结构或者全局变量; (2) ...
分类:
其他好文 时间:
2018-06-23 01:35:22
阅读次数:
205
有时候我们很希望知道当前执行的queue是谁,比如UI操作需要放在main queue中执行。如果可以知道当前工作的queue是谁,就可以很方便的指定一段代码操作在特定的queue中执行。这种做法让GCD方法达到可重入效果: dispatch_queue_set_specific 标记队列 stat ...
分类:
其他好文 时间:
2018-06-22 14:46:15
阅读次数:
163
本人设计了一个高效读写锁,可实现多个线程读一个线程写的锁,应该比Delphi自带的读写锁高效,本人没有做对比测试。 本文的锁不可以在一个线程里重入,否则会锁死,另外读写锁最多支持65535个线程同时读。 一个简易无锁池 一个简易 无锁池 1.所有读写无等待,不需要判断条件直接读写(除自动扩充容量时) ...
本周写了AQS原理及相关应用的学习摘录。它是高级Java开发应该掌握的基础,虽然在当前浮躁的社会背景下,知道这些原理对实际的工作、对个人工作中创造的价值可能没大的影响。学习并在工作中模仿应用这里面设计、思想,可以让你在未来的技术路上走的更远。 AQS与重入锁ReetrantLock原理 AQS共享锁 ...
分类:
其他好文 时间:
2018-06-17 10:54:41
阅读次数:
186
一、AQS原理 AQS(AbstractQueuedSynchronizer)队列同步器是用来构建锁、同步组件的基础框架。 AQS内部通过一个volatile int类型的成员变量state控制同步状态【0代表锁未被占用,1表示已占用】,通过内部类Node构成FIFO的同步队列实现等待获取锁的线程排 ...
分类:
其他好文 时间:
2018-06-11 11:06:46
阅读次数:
255