原子量操作是對乙個整形變數進行的不可被打斷的一系列操作介面。
當我們的程式存在較多對變數的互斥訪問時,我們的程式必然存在較多的鎖和鎖操作,一方面這使得我們的程式難以編寫和維護,另一方面不合理的鎖操作可能會發生死鎖。 為了避免這些問題,sylixos提供了原子量型別atomic_t及其api,原子量型別可儲存乙個整型int型別的值,同時使用原子量api對原子量進行的操作是乙個原子操作,因為原子操作不可打斷,這樣在裝置驅動的併發操作中也就不會存在混亂風險。
atomic_t型別定義
typedef
struct
atomic_t;
#ifdef __gnuc__
typedef
struct
atomic64_t;
#else
typedef
struct
atomic64_t;
#endif
32位版呼叫介面
int api_atomicadd
(int ival, atomic_t *patomic)
;int api_atomicsub
(int ival, atomic_t *patomic)
;int api_atomicinc
(atomic_t *patomic)
;int api_atomicdec
(atomic_t *patomic)
;int api_atomicand
(int ival, atomic_t *patomic)
;int api_atomicnand
(int ival, atomic_t *patomic)
;int api_atomicor
(int ival, atomic_t *patomic)
;int api_atomicxor
(int ival, atomic_t *patomic)
;void api_atomicset
(int ival, atomic_t *patomic)
;int api_atomicget
(atomic_t *patomic)
;int api_atomicswp
(int ival, atomic_t *patomic)
;int api_atomiccas
(atomic_t *patomic, int ioldval, int inewval)
;
64位版呼叫介面
int64 api_atomic64add
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64sub
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64inc
(atomic64_t *patomic64)
;int64 api_atomic64dec
(atomic64_t *patomic64)
;int64 api_atomic64and
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64nand
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64or
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64xor
(int64 i64val, atomic64_t *patomic64)
;void api_atomic64set
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64get
(atomic64_t *patomic64)
;int64 api_atomic64swp
(int64 i64val, atomic64_t *patomic64)
;int64 api_atomic64cas
(atomic64_t *patomic64, int64 i64oldval, int64 i64newval)
;
linux中原子量的學習和理解
原子量的理解 我們知道電晶體有兩種狀態,通電和不通電,對應著二進位制儲存中的1和0,這和開關的原理是一樣的,不過開關可以由人來控制,而電晶體的狀態是由電來控制的 我們可以利用一種特殊的閘電路組合控制乙個電晶體中的狀態不再受所通入電流的影響,可以說是把一位數存到了這個電晶體裡面 當需要讀取時,開放電晶...
驅動中的同步互斥阻塞之原子量
1.原子操作 原子操作指的是在執行過程中不會被別的 路徑所中斷的操作 常用原子操作函式舉例 atomic v v atomic init 0 定義原子變數v並初始化為0 atomic read atomic t v 返回原子變數的值 void atomic inc atomic t v 原子變數增加...
使用C 11原子量實現自旋鎖
自旋鎖是一種基礎的同步原語,用於保障對共享資料的互斥訪問。與互斥鎖的相比,在獲取鎖失敗的時候不會使得執行緒阻塞而是一直自旋嘗試獲取鎖。當執行緒等待自旋鎖的時候,cpu不能做其他事情,而是一直處於輪詢忙等的狀態。自旋鎖主要適用於被持有時間短,執行緒不希望在重新排程上花過多時間的情況。實際上許多其他型別...