Skip to content

Latest commit

 

History

History
30 lines (10 loc) · 1.41 KB

File metadata and controls

30 lines (10 loc) · 1.41 KB

77、synchronized锁同时对原子性、可见性以及有序性的保证

原子性、可见性、有序性,三块东西,都重新从比较细节和底层的层面,都在硬件的级别去给大家说了一下,到底是怎么回事,为什么会发生这个问题,从底层的层面来说了一下,以及大体上有没有什么办法可以来解决这些问题

原子性,基本的赋值写操作都是可以保证原子性的,复杂的操作是无法保证原子性的

可见性,MESI协议、flush、refresh,配合起来,才可以解决可见性

有序性,三个层次,最后一个层次有4种重排(LoadLoad、StoreStore、LoadStore、StoreLoad)

synchronized关键字,同时可以保证原子性、可见性以及有序性的

原子性的层面而言,他加了以后,有一个加锁和释放锁的机制,加锁了之后,同一段代码就只有他可以执行了

可见性,可以保证可见性的,他会通过加入一些内存屏障,他在同步代码块对变量做的写操作,都会在释放锁的时候,全部强制执行flush操作,在进入同步代码块的时候,对变量的读操作,全部会强制执行refresh的操作

更新的数据,别的县城关只要进入代码块,就一定可以读到的

有序性,synchronized关键字,他会通过加各种各样的内存屏障,来保证说,解决LoadLoad、StoreStore等等重排序