1. 程式人生 > >ARM體系結構中原子操作 ATOMIC 的實現

ARM體系結構中原子操作 ATOMIC 的實現

關於整數 的原子操作,對於Atomic_t型別,一直以來,記得書上說的都是要不CPU體系結構本身支援簡單的原子操作,要不提供了鎖記憶體匯流排功能,可以在操作期間,防止對資料的訪問發生。

今天突然想到,ARM架構本身不提供鎖記憶體匯流排功能,也沒有類似的原子操作的指令,那麼如何實現原子操作呢?看了一下程式碼,原來是通過禁止中斷來實現的,由於ARM體系結構不支援SMP架構,所以禁止了中斷也就杜絕了程式碼併發的可能性,從而實現原子操作。

另ARMV6以上的架構使用了 LDREX和STREX指令來實現對某個記憶體地址的獨佔訪問,從而避免了對中斷的禁止操作。(這塊從指令的解釋上看猜測是這樣的,沒有太多瞭解)

• LDREX{<cond>} <Rd>, [<Rn>]
This performs a load, then sets a monitor to “watch” the address
• STREX {<cond>} <Rd>, <Rm>, [<Rn>]
This performs a store and returns “success” in Rd if no intervening access
detected by the monitor.