volatile限定符从性能的角度取消了编译器的优化,每次读取数据直接从内存中读取,不从编译器中读去内容Linux下gcc编译器优化:O0无优化O1缺省,O3最高优化如以下示例:主函数与信号处理函数同时对全局变量进行修改和判断。在主函数中因while循环对该全局变量的值只做判断,因此..
分类:
其他好文 时间:
2016-05-07 16:48:06
阅读次数:
406
计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。
也就是,当程序在运行过程中,...
分类:
编程语言 时间:
2016-05-07 11:21:17
阅读次数:
159
volatile:防止编译器性能优化,与移植性有关。#include<stdio.h>
#include<signal.h>
intdone=0;
voidhandle(intsig)
{
printf("getsig%d\n",sig);
done=1;
}
intmain()
{
signal(SIGINT,handle);
while(!done);
}Makefile:my_volatile:my_volatile.cgcc-o$@$^-O3...
分类:
其他好文 时间:
2016-05-05 17:50:41
阅读次数:
246
四.深入剖析volatile关键字 在前面讲述了很多东西,其实都是为讲述volatile关键字作铺垫,那么接下来我们就进入主题。 1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进 ...
分类:
其他好文 时间:
2016-05-03 23:47:23
阅读次数:
252
学习过并发编程的同学应该对volatile关键字并不陌生。它也是用来保证多线程读写数据时保证数据的一致性,但它不如synchronized强大。synchronized是在执行代码块或是方法体时中隐式的加锁而禁止其他线程来访问。而volatile仅仅是对某个变量的修改及时的可见于其他的线程...
分类:
其他好文 时间:
2016-05-02 11:54:51
阅读次数:
236
Java中关于原子操作和volatile关键字 第一种:采用同步synchronized解决,这样虽然解决了问题,但是也降低了系统的性能。 第二种:采用原子性数据Atomic变量,这是从JDK1.5开始才存在的针对原子性的解决方案,这种方案也是目前比较好的解决方案了。 ...
分类:
编程语言 时间:
2016-04-27 17:17:25
阅读次数:
180
啃书的时候,发现了这个关键字, 以前都没有听过!唉,我真是孤陋寡闻啊。。。
C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:
A volatile specifier is a hint to a...
分类:
其他好文 时间:
2016-04-22 20:55:36
阅读次数:
311
使用volatile关键字的场景
Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的...
分类:
编程语言 时间:
2016-04-22 19:20:33
阅读次数:
240
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于v ...
分类:
编程语言 时间:
2016-04-21 13:37:14
阅读次数:
194
Java 语言中的 volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized 块相比,volatile
变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是synchronized 的一部分。本文介绍了几种有效使用
volatile 变量的模式,并强调了几种不适合使用 volatile 变量的情形。
锁提供了两种主...
分类:
其他好文 时间:
2016-04-19 12:27:39
阅读次数:
203