一、锁锁是一种悲观的机制。为多线程提供了互斥的访问机制。多个线程同时竞争锁时,没获得锁的线程将会被挂起(智能的JVM会根据之前获取锁操作中对锁的持有时间长短来判断是使线程挂起还是自旋) 锁的劣势:1.未竞争到锁的线程挂起后再恢复时,会进行上下文的切换,开销大。2.当一个线程正在等待锁时,它不能干任何 ...
分类:
其他好文 时间:
2018-05-29 18:49:36
阅读次数:
219
因为有的人打着嵌入式硬件工程师的名号装逼,其实嵌入式硬件就是普通硬件工程师做的工作。我们这里都是讨论软件方面的内容,而且嵌入式是以软件为主导的(工资上有较大差距)。如果对硬件感兴趣的,可以参看博客《如何学习硬件设计——理论篇》和《如何学习硬件设计——实践篇》,这里不要求掌握硬件,有一定程度的了解即可 ...
分类:
其他好文 时间:
2018-05-23 14:16:45
阅读次数:
179
这一章节想要大家学习的就是在多进程或者多线程下:如何不冲突的访问同一个文件或者是同一段共享资源: 有如下几个机制需要大家来学习: 原子变量: 普通变量count++:看起来是一句话:实际是三个步骤:第一:首先要把这个变量在内存当中取到CPU:第二:把这个变量进行++;第三:把这个变量的值送回内存:所 ...
分类:
其他好文 时间:
2018-05-17 00:53:33
阅读次数:
385
本文转载自:https://blog.csdn.net/fantasyhujian/article/details/9151615 一、inode是什么? 参考文档:http://tech.diannaodian.com/dw/lin/2012/0112/154629.html 做Android底层 ...
分类:
系统相关 时间:
2018-05-15 22:41:44
阅读次数:
216
偏向锁 JVM默认开启偏向锁。在对象头中锁标志前一位用来标记偏向锁是否可用。 锁标记01表示偏向锁。 偏向锁释放 获得偏向锁的线程,在对象头中写有线程id,不会主动释放锁: 没有其他线程竞争,对象头中始终是获得锁的tid。 线程tid2竞争,此时objhead中仍存着tid1。JVM首先安全暂停ti ...
分类:
编程语言 时间:
2018-05-02 22:10:09
阅读次数:
158
之前做过一个测试,反复执行过多次,发现结果是一样的: 1. 单线程下synchronized效率最高(当时感觉它的效率应该是最差才对); 2. AtomicInteger效率最不稳定,不同并发情况下表现不一样:短时间低并发下,效率比synchronized高,有时甚至比LongAdder还高出一点, ...
分类:
编程语言 时间:
2018-04-25 15:21:03
阅读次数:
244
Windows和POSIX中都提供了自旋锁,我们也可以通过C++11的atomic来实现自旋锁。那么两者性能上面是什么关系?先引入实现代码: 下面给出一个简单测试,两组线程,一组用来插入,另外一组用来取出。测试结果显示: (1)无论是Windows,还是POSIX提供的C语言版本的自旋锁,都和C++ ...
1、可重入锁: 也称为递归锁,当外层函数获得该锁之后,内层递归函数仍有获取该锁的代码,结果不受影响; java中的synchronized ReentrantLock都是可重的 举例: 2、自旋锁 一个线程直接循环执行一个任务,不触发临界条件,另一个线程控制临界条件,另一个线程执行时可以使前一个线程 ...
分类:
编程语言 时间:
2018-04-17 00:03:20
阅读次数:
224
此篇博客所有源码均来自JDK 1.8 在线程获取同步状态时如果获取失败,则加入CLH同步队列,通过通过自旋的方式不断获取同步状态,但是在自旋的过程中则需要判断当前线程是否需要阻塞,其主要方法在acquireQueued(): 通过这段代码我们可以看到,在获取同步状态失败后,线程并不是立马进行阻塞,需 ...
分类:
编程语言 时间:
2018-04-12 13:31:09
阅读次数:
217
阅读这篇文章你将会了解到: 什么是 CAS CAS 实现原理是什么? CAS 在现实中的应用 自旋锁 原子类型 限流器 CAS 的缺点 自旋锁 原子类型 限流器 什么是CAS CAS实现原理是什么? CAS在现实中的应用 CAS的缺点 ...
分类:
编程语言 时间:
2018-04-04 16:10:22
阅读次数:
187