volatile:多个线程同时访问一个变量,CLR为了效率,允许每个线程进行本地缓存,这就导致了变量的不一致性。volatile就是为了解决这个问题,volatile修饰的变量,不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。lock:多个线程同时访问一...
分类:
其他好文 时间:
2014-09-30 16:32:09
阅读次数:
186
众所周知,多线程下计数存在着计数不正确的问题。这个问题的根源在于多个线程对同一个变量可以同时访问(修改)。这样就造成了修改后的结果不一致。
首先在这里先强调一点,volatile 关键字并不能提供多线程安全访问。因为有volatie修饰的变量,每次操作时遵循下面动作:
从内存取值 ---> 放入寄存器 ---> 操作 --->写回内存
这几个步骤不是原子的操作在任意两个...
分类:
编程语言 时间:
2014-09-28 20:09:16
阅读次数:
379
解读C的声明的最好方法是用英语来阅读,道理很简单,因为C语言是美国人发明的。为了把问题变得更简单,在这里暂不考虑const和volatile。接下来遵循以下步骤来解释C的声明。首先着眼于标识符(变量名或者函数名)。从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针、数组、和函数)。优先...
分类:
其他好文 时间:
2014-09-26 23:04:38
阅读次数:
294
volatile搞嵌入式的,一定都特别属性这个关键字,记得第一使用这个关键字的时候是在韦东山老师的,Arm裸机视频的时候。volatile是告诉编译不要对这个变量进行任何优化,直接在内存中进行取值。一般用在对寄存器进行赋值的时候,或修饰可能被多个线程访问的变量。注意:const volatile i...
分类:
其他好文 时间:
2014-09-25 11:45:18
阅读次数:
156
前段时间公司将一个软件平台从intel平台移植到loongson 3a平台,遇到了几个莫名奇妙的问题。现象是两次取内存的值不一样,场景基本上是两个进程共享内存,一个读,一个写。由于是应对国产化的潮流而进行的一个预研的项目,投入的时间不多,问题最后也没有解决。当时怀疑是cache alias的问题,因...
分类:
其他好文 时间:
2014-09-25 03:51:48
阅读次数:
265
volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符。所以我们使用这两种关键字来指定三种简单的存取变量的方式。 int i1; int geti1() {return i1;}volatile int i2; int geti2() {return i2;}i...
分类:
其他好文 时间:
2014-09-24 19:01:17
阅读次数:
169
jdk研究volatile 是什么意思?如何看jdk源码? 如何调试源码!---------仔细解读关键类,关键代码,常用的api的解释! 自己有疑问的不懂地方-------- 不懂的太多怎么办。。。。求分享求带求讲解原理啊! 有老师还是比没有好得多!关键代码、难懂代码是哪些啊! 承上启下结构图.....
分类:
编程语言 时间:
2014-09-21 19:40:11
阅读次数:
278
一。总发布对象:使对象能在当前作用域之外的代码中使用。既将对象的引用传递到其他类的变量和方法。(1)变量的静态初始化(2)声明为volatile变量 或 AtomicReferance对象(3)声明为final变量(4)将变量保存在线程安全的容器中(既保存在一个由锁保护的域中)二。分1.成员变量的初...
分类:
编程语言 时间:
2014-09-20 19:45:19
阅读次数:
287
加锁机制既可以确保可见性又可以确保原子性,而volatile变量只能确保可见性。public class NoVisibility { private static boolean ready; private static int number; private stat...
分类:
其他好文 时间:
2014-09-20 18:36:39
阅读次数:
213