标签:懒汉式 可见性 特性 其他 掺杂 指令 重排序 缓存 控制
一、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关键字才能保证线程安全.如果获取对象的代码块里掺杂了业务在里面,锁整个代码块会降低效率,这是锁要夹在创建对象那块.
标签:懒汉式 可见性 特性 其他 掺杂 指令 重排序 缓存 控制
原文地址:https://www.cnblogs.com/chen-xing-Eli/p/13179842.html