C++中多线程编程之volatile分析

volatile是c++的关键字之一,其修饰的变量表示容易被修改,要求编译器不要对其读写进行优化。

volatile主要有以下特点:

1:对其修饰的变量,每次读取必须去内存中读取数据,而不相信寄存器或者cache中的数据准确性。

2:vs中,在同一个线程中,volatile修饰的变量的,对于其读操作,在其之后的所有写操作都会在读之后完成,不会被编译器优化乱序执行影响到,对于其写操作,所有在其写之前的读操作都会被在写之前完成,不会被编译器优化影响。所以以下代码的正确性得以保障:

#include <iostream>
#include <windows.h>
using namespace std;
 
volatile bool Sentinel = true;
int CriticalData = 0;
 
unsigned ThreadFunc1( void* pArguments ) {
   while (Sentinel)
      Sleep(0);   // volatile spin lock
 
   // CriticalData load guaranteed after every load of Sentinel
   cout << "Critical Data = " << CriticalData << endl;
   return 0;
} 
 
unsigned  ThreadFunc2( void* pArguments ) {
   Sleep(2000);
   CriticalData++;   // guaranteed to occur before write to Sentinel
   Sentinel
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值