C++ volatile类型修饰符(type specifier), 多线程

原创 2016年08月29日 15:57:37

volatile是被设计用来修饰被不同线程访问和修改的变量

volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。

以上内容摘自百度百科

但请注意 : volatile不是用来解决多线程竞争问题的

https://www.zhihu.com/question/31459750/answer/52069135知乎上的解释

#include <stdlib.h>
#include <iostream>
#include <list>
#include <conio.h>
#include <time.h>
#include <algorithm>
#include <windows.h>
//头文件引用较多, 有一些与本程序无关

using namespace std;

int main(int argc, char* argv[])
{
	volatile int i = 10;
    cout << "i = " << i << endl;

    //下面汇编语句的作用就是改变内存中i的值,但是又不让编译器知道
    __asm
    {
        mov dword ptr[ebp-4],20h//把32赋给i, 16进制的20转为10进程是32
    }

    cout << "i = " << i << endl;

	system("pause");
	return 0;
}
运行结果(注意在VS2010中要把运行模式改为Release):

i = 10

i = 32

如果i没被volatile修饰的话, i的值不会改变

版权声明:本文为博主原创文章,未经博主允许不得转载。

C/C++中volatile关键字详解

1. 为什么用volatile?     C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The...
  • whatday
  • whatday
  • 2016年09月12日 10:03
  • 1541

C/C++ volatile让你看的更明白

转载一篇有关C/C++中volatile修饰符的文章,自己用VC++ 10.0测试了一下,与原文有一些不同,特论述如下,让你也让自己看的更明白。 链接:http://blog.sina.com.cn...
  • wwang196988
  • wwang196988
  • 2011年07月21日 16:18
  • 6828

C/C++中volatile的用法

volatile是“易变的”、“不稳定”的意思。volatile是C/C++的一个较为少用的关键字,它用来解决变量在“共享”环境下容易出现的读取错误的问题。...
  • K346K346
  • K346K346
  • 2015年07月18日 11:56
  • 3695

深入分析Volatile的实现原理

引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是 轻量级的synchronized ,它在多处理器开发中保证了共享变量的“可见性”。可见性的意...
  • lc0817
  • lc0817
  • 2016年07月11日 10:27
  • 2133

volatile的用法

volatile是一个关于优化的关键字,目的是告诉编译器每次都要去读变量本身的值,而不是简单的将其优化为一个已知的值。 Volatile const int a = 10; 表示a是一个整形的常量,代...
  • ddl2111
  • ddl2111
  • 2016年02月29日 20:57
  • 204

类型修饰符(type specifier)

volatile 就象大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果没有volatile,基本上会导致...
  • lxf9601
  • lxf9601
  • 2010年12月02日 21:51
  • 998

some type specifier 类型修饰符

volatile 可变的,易变的,使用这个修饰符,禁止编译器对改变量进行优化,每次都从实际存储的地址读取。 mutable 可变的,修饰过的const变量,也能被改变值。...
  • lnwaycool
  • lnwaycool
  • 2012年09月06日 14:58
  • 416

C/C++语言标准

From:http://www.cnblogs.com/emituofo/archive/2012/07/20/2600481.html C语言标准 写在前面:K&R C不用说。个人以为,...
  • fyfcauc
  • fyfcauc
  • 2014年09月23日 12:27
  • 421

C++11

转自 https://zh.wikipedia.org/wiki/C%2B%2B11 C++11,先前被称作C++0x,即ISO/IEC 14882:2011,是目前的C++编程语言的正式标准...
  • arau_sh
  • arau_sh
  • 2013年05月08日 21:20
  • 1242

VS2010 missing type specifier - int assumed. Note: C++ does not support default-int

编译一些网上下载的程序时如果碰到error C4430: missing type specifier - int assumed. Note: C++ does not support defaul...
  • lcalqf
  • lcalqf
  • 2014年12月18日 10:51
  • 3423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ volatile类型修饰符(type specifier), 多线程
举报原因:
原因补充:

(最多只允许输入30个字)