Linux 同步方法例項之原子操作

2021-04-27 15:51:56 字數 1869 閱讀 3468

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...