c/c++ volatile关键字详解


最近看boost并发的相关文档,发现这个关键字我没怎么用过,惭愧惭愧,特意学习。

简介

volatile 关键字在c/c++中与const同级用来修饰变量,通常建立语言级别的memory barrier,用他声明的变量可以被某些编译器未知的因素修改,如操作系统,硬件,其他线程等。遇到这个关键字声明的变量,编译器就不在对其进行优化,当使用violatile声明变量的时候,系统总是从他所在的内存空间直接读取数据,而一般情况下,编译器会对代码进行优化。在连续读取某个内存地址存储的变量时,如果地址没有变化,且在该单线程中没有其他语句改变这个变量中的值,则编译器不会直接去读内存中变量的值,而是从寄存器中直接读取原先边变量的值,所以当有操作系统,硬件,或者其他线程(大多数其他线程争强共享变量时会发生)对改变量进行修改时,就会出现读错误,读出的数据并不是变量现在真正存储的值,从而导致错误的发生。
综上,volatile可以保证每次对变量的访问都是从内存地址直接读取,而不是被编译器优化后可能导致的读错误。

bool extern_tag = false;     // 定义一个全局变量,会有多个线程对此变量进行访问

void thread1(void *arg) {
        // thread1受extern_tag的控制,只要tag为false,一直执行while循环中的操作
    while (
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值