所謂的原子性是指該操作不能再繼續劃分為更小的操作,在多執行緒中原子操作是乙個很重要的概念,決定了該操作是否需要同步機制來進行保護。
在x86中,x=y包含兩個操作:讀取y至暫存器,然後將該值寫入x,其中讀取y的值至暫存器中是原子的,將值寫入x也是原子的,但是這裡需要格外注意的是兩個原子操作的組合不一定是原子操作,如果在這兩步驟之間有另外乙個執行緒更改了y的值,那麼最終得到的結果就不是你想要的結果。
因此,在執行非原子操作時一定要加上同步操作來避免得到不可預料的結果。
多執行緒原子性 CAS以及ABA問題
通常情況下為了保證安全,在乙個執行緒對乙個數值訪問時要上鎖,但是為了保證效率,cas中是不上鎖的。列如 現在有乙個值為0,讀取這個值,並且將其存在e中,則 e 0。然後對e進行遞增運算,有計算結果設為v。e 後,設乙個新的值為n 即 n e 這時去檢視e,如果e還是為0,則表明沒有其他的執行緒修改e...
多執行緒 原子操作
include include includeint sum 0 多個執行緒同時訪問 讀 寫 乙個變數,就會發生衝突。乙個變數的執行緒安全 多個執行緒同時讀寫沒有誤差。解決方法 臨界區 事件機制 互斥量 原子操作 原子操作的 速度快於 臨界區 事件機制 互斥量 原子操作函式,解決多執行緒安全 dwo...
Java多執行緒 原子類
1 基本型別 類atomicboolean atomicinteger atomiclong atomicreference 各自提供對相應型別單個變數的訪問和更新。每個類也為該型別提供適當的實用工具方法。2 陣列型別 類atomicintegerarray atomiclongarray 和ato...