原子操作
原子操作是指不會被執行緒排程機制打斷的操作;這種操作一旦開始,就一直執行到結束,中間不會被其他程序打斷。它是其他核心同步方法的基石。編寫**時能使用原子操作的,就盡量不要用加鎖機制,因為原子操作給系統帶來的開銷小。
一、原子整數操作
1、型別的定義
針對整數的原子操作只能對atomic_t型別的資料進行處理
typedef struct atomic_t;
定義乙個atomic_t型別的方式如下
atomic_t v; //定義v
atomic_t u = atomic_init(0); //定義u並且初始化位0
常用操作函式
atomic_set(&v,4); //設定v=4
atomic_add(&v,4); //設定v = v + 2 = 6 (增加指定數值)
atomic_inc(&v,4); //設定v = v + 1 = 7(自增)
atomic_dec_and_test(&v); //測試自減之後是否為0,為零返回true
原子性與順序性的比較
在大部分的體系結構上,讀取乙個字本身就是一種原子操作,也就是說,在對乙個字寫入期間不可能同時完成讀操作。所謂原子性就是這個道理:乙個字長的讀取總是原子性的發生,絕不可能對同乙個字交錯的進行寫。即讀操作要麼在寫之前完成沒要麼在寫之後完成。
例:對乙個整數初始化為32,然後又賦值為365,那麼讀取這個整數肯定是32或者是365,不可能是其他資料。
**中更多強調的是順序要求,即要求讀必須在寫之後發生,這種需求屬於順序要求。原子性確保指令執行期間不會被打斷,要麼執行完,要麼根本不執行,順序性確保兩條指令必須按照約定好的順序執行,不管處在什麼環境下
linux 原子整數操作詳解
原子操作,顧名思義,就是說像原子一樣不可再細分不可被中途打斷。乙個操作是原子操作,意思就是說這個操作是以原子的方式被執行,要一口氣執行完,執行過程不能夠被os的其他行為打斷,是乙個整體的過程,在其執行過程中,os的其它行為是插不進來的。在linux中提供了兩種形式的原子操作 一種是對整數進行的操作 ...
Atomic原子操作類詳解
1 基本介紹 atomic,是一種採用樂觀鎖方式實現執行緒安全的 可以高效保證執行緒安全的去更新基本變數,陣列,引用型別 其實現的底層原理是cas 底層操作邏輯 cas v,o,n 三個值分別是 v記憶體位址存放的實際值 o預期的值 n更新的新值 當v o表示沒有被其他執行緒更改過,沒有衝突進行更新...
原子性,原子操作
舉個例子 a想要從自己的帳戶中轉1000塊錢到b的帳戶裡。那個從a開始轉帳,到轉帳結束的這乙個過程,稱之為乙個事務。在這個事務裡,要做如下操作 從a的帳戶中減去1000塊錢。如果a的帳戶原來有3000塊錢,現在就變成2000塊錢了。在b的帳戶裡加1000塊錢。如果b的帳戶如果原來有2000塊錢,現在...