volatile到底起什么作用?

 

惭愧的很,这个单词见过很多年,见人用过很多次,却不曾真正了解其本质作用。最近多线程工作多些,才开始重新注意这个关键词。

默认情况下,内存在读写时会同时刷新至缓存、寄存器,那么下次再使用这个变量时,就会从缓存、寄存中读取,加快了速度。但是在多线程时,每个cpu的每个核心有自己的缓存,当改变内存值时,可能其他核心不知道这个改变,仍在使用自己的缓存值,就造成了错误。volatile标记这个内存不会被缓存,从而其他核心使用内存时总是从内存读取,只要内存值被改变,其他核心读取时就是最新值。好处是避免了使用错误值,坏处是降低了速度(但比使用锁快)。可以用来在类似isEnable之类的操作上使用,解决一些轻量级的多线程问题。这类场景中isEnable的值的改变不依赖旧值,只适用于

isEnable=true;

isEnable=false;

不适用于

isEnable=!isEnable;

不能用来做计数器,因为计数器是依赖旧值的

count=count+1;

 

 

 

 

posted @ 2013-08-09 17:38  ^^!  阅读(344)  评论(0编辑  收藏  举报