linux 同步方法例項之原子操作
linux 同步方法例項之原子操作
原子操作定義:
原子操作為不可分割的,在執行完畢不會被任何其它任務或事件中斷的操作
標頭檔案位置:
/usr/src/kernels/2.6.9-55.el-hugemem-i686/include/asm-i386/atomic.h
原子變數原型定義:
typedef struct atomic_t;
說明:型別atomic_t為乙個實際的int型別的變數,volatile描述白變數型別在編譯是不做優化。
初始化
atomic_init(value);
#define atomic_set(v,i) (((v)->counter) = (i))
相加 static __inline__ void atomic_add(int i, atomic_t *v)
自增 static __inline__ void atomic_inc(atomic_t *v)
相減 static __inline__ void atomic_sub(int i, atomic_t *v)
自減 static __inline__ void atomic_dec(atomic_t *v)
讀取 #define atomic_read(v) ((v)->counter)
減操作後判斷是否為0 static __inline__ int atomic_sub_and_test(int i, atomic_t *v)
遞減後判斷是否為0 static __inline__ int atomic_dec_and_test(atomic_t *v)
自增後判斷是否為0 static __inline__ int atomic_inc_and_test(atomic_t *v)
相加後是否為負值 static __inline__ int atomic_add_negative(int i, atomic_t *v)
相加後返回 static __inline__ int atomic_add_return(int i, atomic_t *v)
相見後返回 static __inline__ int atomic_sub_return(int i, atomic_t *v)
自增後返回 #define atomic_inc_return(v) (atomic_add_return(1,v))
自減後返回 #define atomic_dec_return(v) (atomic_sub_return(1,v)
掩碼清除 #define atomic_clear_mask(mask, addr)
掩碼設定 #define atomic_set_mask(mask, addr)
例項:在這裡演示如何初始化、相加和讀取操作
同步例項方法
同步例項方法 修飾例項方法,作用於當前例項加鎖,進入同步 前要獲得當前例項的鎖 方法上新增synchronized就叫做同步方法,例如public synchronized void draw double amount 注意 在乙個類物件中所有的同步方法是互斥的 這種方法不是最佳選擇,因為這裡的同...
核心同步方法(一) 原子操作
簡介 現代作業系統中,同一時間可能有多個核心執行流在執行,因此核心需要一些同步機制來同步對共享資料的訪問。而且在對稱多處理器系統 smp 上,也需要同樣的機制。多個執行執行緒同時訪問和運算元據,就有可能出現共享資料被覆蓋的情況,這是一種很難察覺的危險的情況。原子操作可以保證指令以原子的方式執行,執行...
VS C 執行緒篇之原子同步
long interlockeddecrement long volatile addend 原子遞減變數的指標 返回值 變數遞減後的值long interlockedincrement long volatile addend 原子遞增變數的指標 返回值 變數遞增後的值long interlock...