volatile的深入理解--【sky原创】】的更多相关文章

原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创]   第一题 #include<stdio.h> int main() { unsigned int a=6; int b=-20; printf("%d\n",a+b); (a+b)>6? puts(">6"):puts("<=6"); return 0; } 答案是:>6   第二题 #include<stdio.h> i…
原文:编译预处理 -- 带参数的宏定义--[sky原创] 如有转载请注明出处   编译预处理  --  带参数的宏定义 前面为输出文件,后面为输入文件 gcc -E -o test.i test.c gcc -o test  test.i   test.c   test.i       取消宏定义 #undef 宏名   条件编译的三种形式     第三种 #if 常量表达式 源码1..... #else // 此部分可选 源码2... #endif   #----表示ABC(a) 即为 a这个…
volatile 所有定义的变量都是在内存上面的,  例如: int i = 10; int j = i; int k = i;   i = 10; 是初始化的变量,存放在数据段,未初始化的变量存放在bss段 也就是i为左值时存放在内存上 j = i 此时 i 为右值,那么i的值在寄存器上,j就从寄存器上面取值 由于编译器的原因可能导致编译过程中寄存器上的值会改变 ,那么 k 取到的值就不是我们想要的了 如果加了volatile int k = i ; 那么k每次就从内存上取值,保证了取值的正确…
在keil 4中添加stc系列芯片的方法: 1.从官网下载uv3.cdb的文件网址是:http://www.stcmcu.com/ 2.下载好后把uv3.cdb文件改成STC.cdb:3. 然后将[STC.cdb]放入[keil4]--[UV4]中:4.有些 keil 4 可能只有[ARM]和[UV4]这两个文件夹,那么我们之前安装过 keil 3 的朋友里面找到[c51]的文件夹将其复制到[keil 4]中,于此同时,下面这一步是很重要的,最好备份一下你的[TOOLS.INI]文件, [UV2…
本文是基于对 http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html 这篇文档的理解 volatile 用volatile修饰的变量,线程在每次使用变量的时候,都会读取主内存也就是堆内存中最新值. 解读下面代码运行结果为什么可能不为1000 public class Counter { public volatile static int count = 0; public static void inc() { //这里延…
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/7833881.html 据说,volatile是java语言中最轻量级的并发控制方式. volatile可以保证变量的可见性,指的是什么呢? 可见性指的是在某一线程中对变量进行修改之后,其他线程可以立即发现并使用这个修改(一个线程的修改对其他线程可见). 可见性的实现方式:volatile对java内存模型中主内存和工作内存交互方式的控制.volatile确保一个线程对其修饰的变量的更改立…
register 用法注意与深入:   gcc -o test  test.c   这样编译的话会报错的,因为寄存器变量是不能取地址的,只有内存的变量才能取地址 寄存器变量取的是虚拟地址   #include <stdio.h>   int main(void) {      register int i;      int *p = &i;        return 0; }   深入解析:   一个变量存储是这样的,运行了一段程序后,就是开启了一个进程,那么这个进程的变量就是要存…
1.volatile的作用 一个线程共享变量(类的成员变量.类的静态成员变量等)被volatile修饰之后,就具有以下作用: 1)并发中的变量可见性(不同线程对该变量进行操作时的可见性),即一个线程修改了某个变量的值,则该新值对其他线程立即可见(可立即访问新值/立即强制写入主存): 2)禁止指令重排(包括java编译器和CPU运行时指令重排序): 3)禁用缓存(java虚拟机规范)---子线程的工作内存(包括了CPU缓存). 2.相关概念 2.1)指令重排序: (1)java编译器运行时指令重排…
前言: 这个关键字的重点就三个字,就是可见性.但是面试的时候,你说出可见性三个字,基本上满分100的话,最多只能得到20分.剩下的那80分,就要靠你用硬功夫去获得了. 所谓的硬功夫,其实就是要整明白,在并发当中,可见性到底是什么意思.那么,为了弄明白可见性什么意思,就需要你了解什么叫主存和工作内存.(JMM) 只有把这些概念都搞明白了,你才会知道volatile的真正作用到底是什么.不过有一点要提醒你的是,volatile并不保证同步,这一点一定要记住.不光是应付面试官,在真正使用volatil…
volatile是java语言提供的一种稍弱的同步机制,它的作用是能够保证被volatile修饰的变量,每个线程在获取它的值时都能获取到最新的值. 要理解这个原理首先要知道java内存模型:每个线程都有自己的工作内存,线程对变量的所有操作都必须在工作内存中进行 .每个线程都会将运算需要的数据从主内存复制一份到自己的工作内存,等运算结束之后才会刷新到主内存中. 理解了上述模型,就会发现在并发情况下可能会出现数据不一致的现象,例如线程1和线程2同时从主内存中复制了一个变量a=1到自己的工作内存,但是…