先了解一些词语 volatile:volatile的本意是“易变的”。volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。 ...
分类:
其他好文 时间:
2017-01-24 17:42:11
阅读次数:
208
上一节讨论了 volatile关键字,volatile关键字修饰的作用是不具有 "原子性" 和 "互斥性的" 例如 i++ 操作 就不是一个原子性的操作,i++ 其实分为3个步骤进行 "读-改-写" int temp = i; i = i + 1; i= temp; 先看一段代码: 创建10个线程, ...
分类:
编程语言 时间:
2017-01-22 23:44:13
阅读次数:
278
先看一段代码: 运行这段代码,运行的结果只有: flag= true 这是由于 子线程在操作共享数据时,会将主存总的flag,复制一份到线程的缓存中进行操作,操作完成后会再将数据写到主存中,由于while(true)是一个运行效率非常高的一句代码,而且运行速度非常快,导致主线程再执行循环时没有机会从 ...
分类:
其他好文 时间:
2017-01-22 22:48:52
阅读次数:
217
1.引言
如果你对java的volatile有着疑虑请阅读本文,如果你想对volatile想有一个更深的了解,请阅读本文.本文主要讲的是volatile的写happen-before在volatile...
分类:
其他好文 时间:
2017-01-19 16:16:05
阅读次数:
2990
学过计算机组成原理的一定知道,为了解决内存速度跟不上CPU速度这个问题,在CPU的设计中加入了缓存机制,缓存的速度介于CPU和主存之间。在进行运算的时候,CPU将需要的数据映射一份在缓存中,然后直接操作位于缓存中的数据,操作完毕后再将缓存中的数据写回到主存。这在单线程环境中是没有任何问题的。但是在多 ...
分类:
编程语言 时间:
2017-01-17 20:11:58
阅读次数:
196
https://www.zhihu.com/question/51253466 #include <iostream> #include <fstream> #include <memory> #include <iterator> #include <type_traits> #include < ...
分类:
其他好文 时间:
2017-01-17 10:41:09
阅读次数:
242
多条线程之间有时需要数据交互,下面介绍五种线程间数据交互的方式,他们的使用场景各有不同。1. volatile、synchronized关键字PS:关于volatile的详细介绍请移步至:Java并发...
分类:
编程语言 时间:
2017-01-11 13:17:59
阅读次数:
242
众所周知,NVMe是建立在NVM(Non-Volatile Memory,以Nand-flash为主)和PCIe基础上的一种新的传输协议,区别于SATA/SAS接口上使用的SCSI。SATA由于继承了HDD的生态系统,在成本和兼容性等方面皆具优势,所以成为多数用户的优先选择。但是进入2017年,这个... ...
分类:
其他好文 时间:
2017-01-10 13:43:14
阅读次数:
965
AtomicInteger中 维护了一个变量 volatile int value; AtomicLong中 维护了一个变量 volatile Long value; ...
分类:
其他好文 时间:
2017-01-10 13:29:22
阅读次数:
177
const修饰变量 C语言中,const修饰的变量是只读的,本质还是变量,修饰的变量也会在内存中占用空间(这不废话么)本质上const只对编译器有用,在运行时无用。const和类型顺序无要求,一般类型在前,const在后。 const修饰的数组是只读的,修饰的数组空间不可被改变。 const int ...
分类:
其他好文 时间:
2017-01-09 18:01:30
阅读次数:
169