《Java併發編程的藝術》第二章--2.3--原子操做的實現原理

原子操做(atomic operation)意爲「不可被中斷的一個或一系列操做」緩存

1.術語定義優化

在瞭解原子操做的實現原理前,先要了解一下相關的術語,如圖所示的CPU術語定義atom

2.處理器如何實現原子操做blog

處理器提供總線鎖定和緩存鎖定兩個機制來保證複雜內存操做的原子性。內存

(1)使用總線鎖保證原子性io

第一個機制是經過總線鎖保證原子性。若是多個處理器同時對共享變量進行讀改寫操做(i++就是經典的讀改寫操做),那麼共享變量就會被多個處理器同時進行操做,這樣讀改寫操做就不是原子的,操做完以後共享變量的值會和指望的不一致。那麼,想要保證讀改寫共享變量的操做是原子的,就必須保證CPU1讀改寫共享變量的時候,CPU2不能操做緩存了該共享變量內存地址的緩存。處理器使用總線鎖就是來解決這個問題的。所謂總線鎖就是使用處理器提供的一個LOCK#信號,當一個處理器在總線上輸出此信號時,其餘處理器的請求將被阻塞住,那麼該處理器能夠獨佔共享內存。變量

(2)使用緩存鎖保證原子性原理

第二個機制是經過緩存鎖定來保證原子性。在同一時刻,咱們只需保證對某個內存地址的操做是原子性便可,但總線鎖定把CPU和內存之間的通訊鎖住了,這使得鎖按期間,其餘處理器不能操做其餘內存地址的數據,因此總線鎖定的開銷比較大,目前處理器在某些場合下使用緩存鎖定代替總線鎖定來進行優化。所謂「緩存鎖定」是指內存區域若是被緩存在處理器的緩存行中,而且在Lock操做期間被鎖定,那麼當它執行鎖操做回寫到內存時,處理器不在總線上聲言LOCK#信號,而是修改內部的內存地址,並容許它的緩存一致性機制來保證操做的原子性,由於緩存一致性機制會阻止同時修改由兩個以上處理器緩存的內存區域數據,當其餘處理器回寫已被鎖定的緩存行的數據時,會使緩存行無效。請求

相關文章
相關標籤/搜索