C++中volatile关键字的使用

线程下的volatile

有些变量是用volatile关键字声明的。当两个线程都要用到某一个变量且该变量的值会被改变时,应该用volatile声明,该关键字的作用是防止优化编译器把变量从内存装入CPU寄存器中。如果变量被装入寄存器,那么两个线程有可能一个使用内存中的变量,一个使用寄存器中的变量,这会造成程序的错误执行。volatile的意思是让编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的值,如下:

volatile  BOOL  bStop  =  FALSE;  
 
// 在一个线程中:  
 while(  !bStop  )  {  ...  }  
bStop  =  FALSE;  
return;    
 
//在另外一个线程中,要终止上面的线程循环:  
bStop  =  TRUE;  
while(  bStop  );  //等待上面的线程终止,

如果bStop不使用volatile申明,那么这个循环将是一个死循环,因为bStop已经读取到了寄存器中,寄存器中bStop的值永远不会变成FALSE,加上volatile,程序在执行时,每次均从内存中读出bStop的值,就不会死循环了。

发布了34 篇原创文章 · 获赞 8 · 访问量 1863

猜你喜欢

转载自blog.csdn.net/weixin_43583163/article/details/103480163