volatile
CarlosXu14
日常分享代码心得,勿吐槽
展开
-
并发情况下的单例模式实现
常见的单例模式是针对一个线程的情况下实现没问题,但是当多个线程去请求资源的时候,可能出现产生多个对象,采用synchronized上锁可以解决99.9%这一问题,但是仍可能存在指令重排的情况(数据之间没有依赖性,底层编译的时候可能指令没按顺序),这一情况,使用volatile关键字修饰变量可以得到很好的解决。因为volatile关键字可以反正指令重排。 volatile实现禁止指令重排优化,从而避...原创 2019-11-06 21:00:30 · 155 阅读 · 0 评论 -
并发编程volatile
如图所示,使用volatile修饰一个boolean变量initFlag,当多线程调用时:如图,线程2先调用变量,修改变量状态为true,修改过后在准备修改主内存之前其实上了一把锁ock,而且在其中需要通过MESI,当经过MESI时, MESI会通知其他线程,当前变量状态改变,这时其他线程的cpu总线嗅探机制会将自己线程的变量状态设置为失效,之后重新去主内存加载变量,在加载之前有一个优先级特别低...原创 2019-10-23 19:34:57 · 95 阅读 · 0 评论