原子操作為啥比較快

2021-07-10 21:30:55 字數 1877 閱讀 7711

指令

效果描述

leal s,d

d = &s

movl地版,s位址入d,d僅能是暫存器

incl d

d++加1

decl d

d--減1

negl d

d = -d

取負notl d

d = ~d

取反addl s,d

d = d + s

加subl s,d

d = d – s

減imull s,d

d = d*s

乘xorl s,d

d = d ^ s

異或orl s,d

d = d | s

或andl s,d

d = d & s

與sall k,d

d = d << k

左移shll k,d

d = d << k

左移(同sall)

sarl k,d

d = d >> k

算數右移

shrl k,d

d = d >> k

邏輯右移

裡面的 ++  和 -- 指令  分別是  incl  和 decl 指令

計算機字長 : 字長是cpu的主要技術指標之一,指的是cpu一次能並行處理的二進位制位數,字長總是8的整數倍,通常pc機的字長為16位(早期),32位,64位

所以一般 等於 或者 小於 計算機字長的 指令操作,就是原子操作 。

incl

指令是乙個 

rmw(

read

,modify

,write

) 操作,指令執行包括三個階段:讀記憶體,修改變數,寫記憶體。

系統提供了乙個 lock字首,有lock 字首 的只能用於 防存指令,在執行期間,記憶體匯流排會被鎖定,知道 指令 執行結束。

這樣的lock_incl 的指令 被稱為 原子 操作 。

結論 :

而類似於 windows 下面的 臨界區 ,由於需要鎖定 執行的 指令 比較多,每次 讀取的位元組數 也 有可能 大於  計算機字長 ,所以需要多次 lock_incl 操作,所以相比較真正的 原子操作 ,會比較慢。

很多時候,我們的共享資料都大於乙個字長,更新操作也不是一條指令就可以完成的。更多時候,我們還需要保證一組共享資料的一系列更新的原

子性。

原子性,原子操作

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

開始工作為啥這麼難?

本來以為工作了以後就會生活的好一些,沒想到啊,沒想到,咱無語了,來做華為的外包居然這麼慘。技術上,咱是個新手,啥工作經驗都沒有,可以說狗屁不懂 生活上,咱是個窮光蛋,可以用身無分文來形容了 朋友不夠多,技術不夠好,頭髮短,見識也短 說實話,本以為大學專業技術沒學好,個人能力總能說的過去吧,我還曾信誓...

原子變數與原子操作

1.原子操作的速度要快於臨界區,event,互斥量,如果多個執行緒同時寫乙個變數時,最方便的就是原子操作。原子操作函式,解決多執行緒安全 2.原子變數也是為了解決執行緒衝突問題,如果兩個執行緒同時訪問同乙個變數,乙個執行緒改變了這個變數,另乙個執行緒就會出現一些bug。3.release和debug...