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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/w442863748/article/details/52350582

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

猜你喜欢

转载自blog.csdn.net/w442863748/article/details/52350582