天天看點

原子操作實作原理

原子(atomic)本意是“不能被進一步分割的最小粒子”,而原子操作(atomic operation)意為“不可被中斷的一個或一系列操作”。

如何實作原子操作

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

總線鎖就是使用處理器提供的一個LOCK#信号,當一個處理器在總線上輸出此信号時,其他處理器的請求将被阻塞住,那麼該處理器可以獨占共享記憶體。

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

在同一時刻,我們隻需保證對某個記憶體位址的操作是原子性即可,但總線鎖定把CPU和記憶體之間的通信鎖住了,這使得鎖定期間,其他處理器不能操作其他記憶體位址的資料,是以總線鎖定的開銷比較大,目前處理器在某些場合下使用緩存鎖定代替總線鎖定來進行優化。

頻繁使用的記憶體會緩存在處理器的L1、L2和L3高速緩存裡,那麼原子操作就可以直接在處理器内部緩存中進行,并不需要聲明總線鎖,

所謂“緩存鎖定”是指記憶體區域如果被緩存在處理器的緩存行中,并且在Lock操作期間被鎖定,那麼當它執行鎖操作回寫到記憶體時,處理器不在總線上聲言LOCK#信号,而是修改内部的記憶體位址,并允許它的緩存一緻性機制來保證操作的原子性,因為緩存一緻性機制會阻止同時修改由兩個以上處理器緩存的記憶體區域資料,當其他處理器回寫已被鎖定的緩存行的資料時,會使緩存行無效。

但是有兩種情況下處理器不會使用緩存鎖定。

第一種情況是:當操作的資料不能被緩存在處理器内部,或操作的資料跨多個緩存行(cache line)時,則處理器會調用總線鎖定。

第二種情況是:有些處理器不支援緩存鎖定。

繼續閱讀