1volatile:易变的,一般寄存器的访问速度比RAM快,所以在指定了优化之后,一般编译器会从寄存器读取数据以加快速度.而对于:由硬件寄存器设备决定的状态信息等 中断服务程序中修改的且最终要被其它程序查询使用的变量标志等如:按键值,软定时次数等 多线程共享变量都要用volatile修饰,让编...
分类:
编程语言 时间:
2014-08-30 01:15:18
阅读次数:
244
在开发中,我们时常想从某个代码开始处进行代码跟踪调试,有人提议在需要的地方加个while(1)循环,其实这样很容易被编译器优化掉,更好的做法是,在需要的C语言代码中加入一个断点:
asm volatile("B .");
这样,代码就会停在此处不往下走,我们接下来可以使用仿真器,设置PC指向下一条,一步一步跟踪调试代码。...
分类:
编程语言 时间:
2014-08-27 23:31:48
阅读次数:
309
本文内容节选自:Java开发编程:volatile关键字解析...
分类:
编程语言 时间:
2014-08-27 20:33:48
阅读次数:
293
软件时钟
#include "global.h"
//时基函数结构体
typedef struct
{
uint16_t DelayTime;
uint16_t TimeBackup;
uint16_t Init;
}TIMER_T;
static volatile uint16_t u16Day; //日
static volatile uint16_t u1...
分类:
其他好文 时间:
2014-08-26 13:48:16
阅读次数:
164
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值(From Memory),而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:1) 并行设备的硬件寄存...
分类:
编程语言 时间:
2014-08-26 11:15:55
阅读次数:
287
Singleton模式可以是很简单的,它的全部只需要一个类就可以完成(看看这章可怜的UML图)。但是如果在“对象创建的次数以及何时被创建”这两点上较真起来,Singleton模式可以相当的复杂,比头五种模式加起来还复杂,譬如涉及到DCL双锁检测(double checked locking)的讨论、涉及到多个类加载器(ClassLoader)协同时、涉及到跨JVM(集群、远程EJB等)时、涉及到单例对象被销毁后重建等。对于复杂的情况,本章中会涉及到其中一些[1]...
分类:
其他好文 时间:
2014-08-23 17:47:51
阅读次数:
327
Java并发编程:volatile关键字解析 volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理...
分类:
编程语言 时间:
2014-08-22 22:32:09
阅读次数:
318
volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。也就是说,volatile变量对于每次使用,线程都能得到当前v...
分类:
编程语言 时间:
2014-08-22 22:21:49
阅读次数:
250
对于CAS是一种有别于synchronized的一种乐观锁实现.是一种非阻塞锁算法.CAS通过与原始预期值进行比较来确定是否修改主内存中数据的一种方案.基于一个线程的失败或者挂起不应该影响其他线程的失败或挂起这样的前提,而提出硬件层次的实现数据处理的互斥。可以自动更新共享数据,而且能够检测到其他线程的干扰,而
compareAndSet() 就用这些代替了锁定。对于实现CAS的原子类(Atom...
分类:
编程语言 时间:
2014-08-22 10:56:46
阅读次数:
261
volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。下面举例说明。在D...
分类:
其他好文 时间:
2014-08-21 16:40:24
阅读次数:
180