volatile 是“易变的”、“不稳定”的意思。volatile是 c++ 的一个关键字,用来解决在“共享”环境下容易出现的读取错误的问题。
在单任务的环境中,一个函数体内部,如果在两次读取变量的值之间的语句没有对变量的值进行修改,那么编译器就会设法对可执行代码进行优化。由于访问寄存器的速度要快过RAM(从RAM中读取变量的值到寄存器),以后只要变量的值没有改变,就一直从寄存器中读取变量的值,...
分类:
编程语言 时间:
2016-05-07 07:00:53
阅读次数:
283
sig_atomic_t类型与volatile限定符volatile:防止编译器优化代码:1#include<stdio.h>
2#include<signal.h>
3inta=0;
4voidsignal_handler(intsignal)
5{
6printf("signaliscoming\n");
7a=1;
8}
9intmain()
10{
11signal(2,signal_handler);
12while(!a);
13return..
分类:
其他好文 时间:
2016-05-07 01:18:03
阅读次数:
276
STM32例子代码中会有像这样的代码 static __IO uint32_t TimingDelay; 这里边的__IO修饰符不好理解,单从字面可以看出是为IO相关,查其标准库可以得知这个__IO原来是在Core_cm3.h中被重定义,其实就是volatile,句子如下 /* IO definit ...
分类:
其他好文 时间:
2016-05-06 19:37:43
阅读次数:
154
1. synchonrize如何更好地使用?
谈到这个问题, 主要先从这几个方面来入手:
线程的几种状态synchonrize的几种使用方法比较synchonrize和volatile比较synchonrize和juc中的锁比较用了锁就真的没有并发问题了么?
1.1 线程的几种状态
不熟悉线程的生命周期和相互的转换控制, 是无法写好并发代码的.
图简单易懂,...
分类:
编程语言 时间:
2016-05-06 16:00:23
阅读次数:
261
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
在研究c# 线程之间通信时,发现传统的方法大概有三种 ①全局变量,由于同一进程下的多个进程之间共享数据空间,所以使用全局变量是最简单的方法,但要记住使用volatile进行限制。 ②线程之间发送消息(这个随后文章中会讨论到)。 ③ CEvent为MFC中的一个对象,可以通过对CEvent的触发状态进 ...
分类:
编程语言 时间:
2016-05-05 14:19:51
阅读次数:
166
四.深入剖析volatile关键字 在前面讲述了很多东西,其实都是为讲述volatile关键字作铺垫,那么接下来我们就进入主题。 1.volatile关键字的两层语义 一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义: 1)保证了不同线程对这个变量进 ...
分类:
其他好文 时间:
2016-05-03 23:47:23
阅读次数:
252
Java? 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的
Java 理论与实践 中,Brian Goetz 将介绍几种正确使用 volatile 变量的模式,并针对其适用性限制提出一些建议。
Java 语言中的 v...
分类:
其他好文 时间:
2016-05-03 18:47:21
阅读次数:
211
常量:#defineconst字符串常量181016进制转换sizeof关键字变量intfolatchar类型限定constvolatileregister输入输出printfscanf运算符=+-*/%+=-=*=/=%=++--,运算符优先级代码块{}类型转换1C语言中的数据类型1.1常量常量就是在程序中不可变化的量,常量是不可被赋值的。1.1.1#defi..
分类:
编程语言 时间:
2016-05-02 17:14:59
阅读次数:
428
学习过并发编程的同学应该对volatile关键字并不陌生。它也是用来保证多线程读写数据时保证数据的一致性,但它不如synchronized强大。synchronized是在执行代码块或是方法体时中隐式的加锁而禁止其他线程来访问。而volatile仅仅是对某个变量的修改及时的可见于其他的线程...
分类:
其他好文 时间:
2016-05-02 11:54:51
阅读次数:
236