思路:
- cpu多级缓存 - 伪共享
- 解决一致性
- 缓存锁MESI + 总线锁
- 缓存行填充
- cpu指令乱序
- 演示demo
- 为什么乱序 - 好处
- 因为cpu比内存块太多,为了充分压榨cpu
- cpu内存屏障阻止乱序
- sfence&lfence&mfence
- 解决一致性
- volatile实现
- 字节码层面
- 在access flag上标识了他是volatile的 - demo
- jvm层面
- SS 写操作 SL
- LL 读操作 LS
- 操作系统
- lock指令
- 写操作会回写到主内存,其他线程有读操作只能读取最新的
- lock指令
- 字节码层面
- synchronized实现
- 字节码层面
- 修饰代码块 monitorenter & 2 monitorexit
- 修饰方法 同volatile会有一个修饰符标识
- jvm
- c语言调用操作系统同步机制 - monitor对象和reentrant实现很类似
- 操作系统
- lock指令 - metux 用户态到内核态切换决定哪个线程有锁
- 锁升级
- 字节码层面