《Java并发编程的艺术》第二章--2.3--原子操做的实现原理

原子操做(atomic operation)意为“不可被中断的一个或一系列操做”缓存

1.术语定义优化

在了解原子操做的实现原理前,先要了解一下相关的术语,如图所示的CPU术语定义atom

2.处理器如何实现原子操做blog

处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操做的原子性。内存

(1)使用总线锁保证原子性io

第一个机制是经过总线锁保证原子性。若是多个处理器同时对共享变量进行读改写操做(i++就是经典的读改写操做),那么共享变量就会被多个处理器同时进行操做,这样读改写操做就不是原子的,操做完以后共享变量的值会和指望的不一致。那么,想要保证读改写共享变量的操做是原子的,就必须保证CPU1读改写共享变量的时候,CPU2不能操做缓存了该共享变量内存地址的缓存。处理器使用总线锁就是来解决这个问题的。所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其余处理器的请求将被阻塞住,那么该处理器能够独占共享内存。变量

(2)使用缓存锁保证原子性原理

第二个机制是经过缓存锁定来保证原子性。在同一时刻,咱们只需保证对某个内存地址的操做是原子性便可,但总线锁定把CPU和内存之间的通讯锁住了,这使得锁按期间,其余处理器不能操做其余内存地址的数据,因此总线锁定的开销比较大,目前处理器在某些场合下使用缓存锁定代替总线锁定来进行优化。所谓“缓存锁定”是指内存区域若是被缓存在处理器的缓存行中,而且在Lock操做期间被锁定,那么当它执行锁操做回写到内存时,处理器不在总线上声言LOCK#信号,而是修改内部的内存地址,并容许它的缓存一致性机制来保证操做的原子性,由于缓存一致性机制会阻止同时修改由两个以上处理器缓存的内存区域数据,当其余处理器回写已被锁定的缓存行的数据时,会使缓存行无效。请求

相关文章
相关标签/搜索