原子操作實現原理

2021-10-02 14:52:31 字數 786 閱讀 8617

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

(1)使用匯流排鎖保證原子性

​ 匯流排鎖就是使用處理器提供的乙個lock#訊號,當乙個處理器在匯流排上輸出此訊號時,其他處理器的請求將被阻塞住,那麼該處理器可以獨佔共享記憶體。

(2)使用快取鎖保證原子性

​ 在同一時刻,我們只需保證對某個記憶體位址的操作是原子性即可,但匯流排鎖定把cpu和記憶體之間的通訊鎖住了,這使得鎖定期間,其他處理器不能操作其他記憶體位址的資料,所以匯流排鎖定的開銷比較大,目預處理器在某些場合下使用快取鎖定代替匯流排鎖定來進行優化。

​ 頻繁使用的記憶體會快取在處理器的l1、l2和l3快取記憶體裡,那麼原子操作就可以直接在處理器內部快取中進行,並不需要宣告匯流排鎖,

​ 所謂「快取鎖定」是指記憶體區域如果被快取在處理器的快取行中,並且在lock操作期間被鎖定,那麼當它執行鎖操作回寫到記憶體時,處理器不在匯流排上聲言lock#訊號,而是修改內部的記憶體位址,並允許它的快取一致性機制來保證操作的原子性,因為快取一致性機制會阻止同時修改由兩個以上處理器快取的記憶體區域資料,當其他處理器回寫已被鎖定的快取行的資料時,會使快取行無效。

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

第一種情況是:當操作的資料不能被快取在處理器內部,或操作的資料跨多個快取行(cache line)時,則處理器會呼叫匯流排鎖定。

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

原子操作原理分析

原子操作是指不被打斷的操作,即它是最小的執行單位。最簡單的原子操作就是一條條的彙編指令 不包括一些偽指令,偽指令會被彙編器解釋成多條彙編指令 在 linux 中原子操作對應的資料結構為 atomic t,定義如下 typedef struct atomic t 本質上就是乙個整型變數,之所以定義這麼...

原子性,原子操作

舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在...

x86平台原子操作API的實現原理

原子操作的意義 對於軟體來說,的行為必須是確定的,就是說通過手工分析 也能預知執行結果。但是程式在併發和並行時,因為作業系統任務排程的不確定性和多處理器之間的相互影響,導致 執行的結果無法預知。這種情況下,只有強制保證某些指令的執行是原子操作,執行結果才是可預知的,原子操作也是多工作業系統設計的基石...