指令
效果描述
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...