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++常见修饰符

auto, const, register,  static, volatile, extern.

C/C++中存储类型修饰符的区别(auto、static、register、extern、volatile、restrict)

一、局部变量和全局变量: (1)局部变量:局部变量也叫自动变量,它声明在函数开始,生存于栈,它的生命随着函数的返回而结束。 #include int main(void) { au...

C/C++中存储类型修饰符的区别(auto、static、register、extern、volatile、restrict)

一、局部变量和全局变量: (1)局部变量:局部变量也叫自动变量,它声明在函数开始,生存于栈,它的生命随着函数的返回而结束。 [cpp] view plaincopypr...

C语言类型修饰符 在这个上边吃大亏了啊 volatile

今天调试程序的时候出了一个非常奇怪的bug,令我百思不得其解,最后还是我的项目经理给我指出问题所在,原来是volatile 在搞鬼 所以痛下决心弄明白这些陷阱。 编译器会对程序进行优化,在某些情况...

类型修饰符Volatile 以及字符串函数strrchr

类型修饰符Volatile 以及字符串函数strrchr就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。...

类型修饰符volatile关键字

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而...

C++储存类型修饰符

c#中多线程修饰符volatile

volatile是C#中用于控制同步的关键字,其意义是针对程序中一些敏感数据,不允许多线程同时访问,保证数据在任何访问时刻,最多有一个线程访问,以保证数据的完整性,volatile是修饰变量的修饰符。...

C++多线程有必要加volatile么?

1volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略, 且要求每次直接读值.简单地说就是防止编译器对代码进行优化.比如如下程序: XBYTE[2] = 0x55...

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

1. error C4430: missing type specifier - int assumed. Note: C++ does not support default-int ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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