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

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的值不会改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任飘萍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值