接口:
32位整型原子操作的其他的函數(shù)(列出,方便查詢):
ATOMIC_INIT(int i) 宏 用 i 初始化 atomic_t 類型的變量
int atomic_read(atomic_t *v) 宏 讀 v 的值
void atomic_set(atomic_t *v, int i); 宏 設(shè) v 的值為 i
void atomic_add(int i, atomic_t *v); 宏 將 v 的值加 i
void atomic_sub(int i, atomic_t *v); 宏 將 v 的值減 i
void atomic_inc(atomic_t *v); 宏 將 v 的值加 1
void atomic_dec(atomic_t *v); 宏 將 v 的值減 1
int atomic_sub_and_test(int i, atomic_t *v); 宏 將 v 的值減 i,(0==v) ? 非0值 : 0;
int atomic_inc_and_test(atomic_t *v); 宏 將 v 的值加 1,(0==v) ? 非0值 : 0;
int atomic_dec_and_test(atomic_t *v); 宏 將 v 的值減 1,(0==v) ? 非0值 : 0;
int atomic_add_negative(int i, atomic_t *v); 宏 將 v 的值加 1,(v<0) ? 非0值 : 0;
int atomic_add_return(int i, atomic_t *v); 函 將 v 的值加 i,并返回 +i 后的結(jié)果
int atomic_sub_return(int i, atomic_t *v); 函 將 v 的值減 i,并返回 -i 后的結(jié)果
int atomic_inc_return(atomic_t *v); 宏 將 v 的值加 1,并返回 +1 后的結(jié)果
int atomic_dec_return(atomic_t *v); 宏 將 v 的值減 1,并返回 -1 后的結(jié)果
int atomic_add_unless(atomic_t *v, int a, int u); 涵 ( v!=u ) ? v+a,返回非0值 : 0;
int atomic_inc_not_zero(atomic_t *v); 宏 ( v!=0 ) ? v+1,返回非0值 : 0;
64位整型原子操作:和32位整型原子操作一致,所操作的接口只是名稱不同,功能一致。
ATOMIC64_INIT(int i) 宏 用 i 初始化 atomic_t 類型的變量
int atomic64_read(atomic_t *v) 宏 讀 v 的值
void atomic64_set(atomic_t *v, int i); 宏 設(shè) v 的值為 i
void atomic64_add(int i, atomic_t *v); 宏 將 v 的值加 i
void atomic64_sub(int i, atomic_t *v); 宏 將 v 的值減 i
void atomic64_inc(atomic_t *v); 宏 將 v 的值加 1
void atomic64_dec(atomic_t *v); 宏 將 v 的值減 1
...
...
位原子操作:
這種操作的數(shù)據(jù)類型是 unsigned long, 32位系統(tǒng)下為32bit,64位系統(tǒng)下為64bit。
位原子操作函數(shù)主要功能是將 unsigned long 變量中的指定位設(shè)為0或設(shè)為1。
示例:
unsigned long value = 0;
// 設(shè)置 value 的第0位為1, value = 0000000000000000 0000000000000001
set_bit(0, &value);
// 設(shè)置 value 的第2位為1, value = 0000000000000000 0000000000000101
set_bit(2, &value);
// 設(shè)置 value 的第0位為0, value = 0000000000000000 0000000000000100
clear_bit(0, &value);
// 將 value 的第0位取反,第0位為1則設(shè)為0,為0則設(shè)為1
change_bit(0, &value);