理想状态下的数据概念模型与我们的意图完全相符, AB两条线程, 同时对数字 1 进行加1操作, 结果 为 3
Java 同步原语
计算机的屏障指令
Load 指令, 使缓存失效, 从主内存读取数据...锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息
当线程尝试释放锁时, JMM会将线程内的共享变量, 刷新到主内存当中....当线程尝试获取锁是, JMM会将线程内的共享变量地址设为无效.从而临界区的变量必须从主内存当中重新获取....在执行前增加 Lock 前缀
保证了对内存操作的原子性 (通过锁内存总线来实现, 这样会使所有处理器无法访问内存数据....所以还有另外一种情况, 即所需要操作的数据在带有 Lock 前缀指令执行之前就已经被持有该缓存行的处理器锁定, 则不会通过锁总线来完成这步指令, 因为此时的数据无法被其他处理器读取, 该操作成为缓存锁定