volitail关键字
Posted chen-xing-eli
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了volitail关键字相关的知识,希望对你有一定的参考价值。
一、volitail起到什么作用
1.可变的,跟踪变量的变化,保证线程的可见性.
1.1堆内存是所有线程共享的内存,每个线程都有自己专属的工作内存,当某一线程要访问某一个值的时候,都会copy一份到自己的空间,单线程要改变这个值的时候首先会对自己空间里的值进行改变,
什么时候写回堆的时候不好控制.其他线程也不好控制堆内存的值是否改变.这时用到volitail可以让各个线程共享到这个值的改变.
1.2volitail的本质是用了MESI(CPU的缓存一致性协议)
2.禁止指令重排序.
1.老的cpu架构是并行执行,新的cpu是并发的执行,如果想用新的架构特性就需要compiler(编译器)对执行代码进行重新排序,
例: a =1 ; b = 2 ; a =4 ; 可能会重排序成 a=4 ;b =2; a =1;
2.单例模式 double check
单例模式懒汉式要加sync关键字才能保证线程安全.如果获取对象的代码块里掺杂了业务在里面,锁整个代码块会降低效率,这是锁要夹在创建对象那块.
以上是关于volitail关键字的主要内容,如果未能解决你的问题,请参考以下文章