一针见血系列[14]: 双重校验锁,这样理解才是最靠谱...

发布日期:2018年10月29日| 点击: 1,205 次| 评论:2

公司团建,约定某日去某地旅游。某日到了,早上,大家一起去车站集合。在车站里,公司人事询问大家:都吃早餐了吗?没有吃的人站出来到旁边。这是第一重校验。 没有吃早餐的人,都站在了旁边。这是进入了发餐区,也算...

一针见血系列[13]: yield,就是礼貌的让了一下,别当...

发布日期:2018年10月29日| 点击: 808 次| 暂无评论

早上,你去上班,路上遇见一个熟人,领着一袋苹果,从菜市场往家走,他会对你说:来,吃个苹果吧。这个时候,你千万别当真,他只是用手比划了比划,领苹果的手往前伸了伸而已。你压根就接不到递过来的苹果。 yiel...

一针见血系列[12]: 自旋锁没有那么高大上,就是一个...

发布日期:2018年10月29日| 点击: 780 次| 暂无评论

我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。最简单的实现...

一针见血系列[11]: 一句话理解内核空间和用户空间

发布日期:2018年10月29日| 点击: 734 次| 评论: 1

内核空间,用户空间这些术语让人有点发蒙。空间的本质就是内存。一堆符号叫程序;跑起来之后叫进程;内存条插入主板,跑上程序,就变成了空间,被操作系统占用的叫内核空间,被用户进程占用的叫用户空间。 ...

一针见血系列[10]: 无锁同步并不是万能,同步锁也并...

发布日期:2018年10月29日| 点击: 784 次| 暂无评论

1、对于资源竞争较少的情况,使用同步锁进行线程阻塞和唤醒切换以及用户态内核态间的切换操作额外浪费消耗CPU资源;而CAS基于硬件实现,不需要进入内核,不需要切换线程,操作自旋几率较少,因此可以获得更高的性能。 ...

一针见血系列[9]: volatile的作用是什么?两者的关系...

发布日期:2018年10月29日| 点击: 1,389 次| 暂无评论

volatile关键字的作用主要有两个: (1)内存可见性,见:http://swiftlet.net/archives/3024 (2)有序性、禁止指令重排相关的内容,见这两篇文章: http://swi...

一针见血系列[8]: 什么叫内存可见性?什么叫寄存器可...

发布日期:2018年10月29日| 点击: 1,260 次| 暂无评论

数据在哪里存在呢?只在内存吗?不是的。数据在内存中存在,但是当用的时候会加载到CPU的寄存器里面。内存和寄存器是两个地方,从而出现了新的名词:内存可见性和寄存器可见性。 为什么叫内存可见性呢?感觉很...

一针见血系列[7]: volatile离我们很近,很亲切,不该...

发布日期:2018年10月29日| 点击: 1,145 次| 评论: 1

synchronized代码块儿里面的变量都实现了内存可见性。内存可见性的底层是CPU的指令实现的。volatile修饰的是变量,它的作用也是实现内存可见性,底层用的用的同一个CPU指令。可以这样理解:synchr...