接口:
32位整型原子操作的其他的函数(列出,方便查询):
ATOMIC_INIT(int i) 宏 用 i 初始化 atomic_t 类型的变量
int atomic_read(atomic_t *v) 宏 读 v 的值
void atomic_set(atomic_t *v, int i); 宏 设 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 后的结果
int atomic_sub_return(int i, atomic_t *v); 函 将 v 的值减 i,并返回 -i 后的结果
int atomic_inc_return(atomic_t *v); 宏 将 v 的值加 1,并返回 +1 后的结果
int atomic_dec_return(atomic_t *v); 宏 将 v 的值减 1,并返回 -1 后的结果
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); 宏 设 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
...
...
位原子操作:
这种操作的数据类型是 unsigned long, 32位系统下为32bit,64位系统下为64bit。
位原子操作函数主要功能是将 unsigned long 变量中的指定位设为0或设为1。
示例:
unsigned long value = 0;
// 设置 value 的第0位为1, value = 0000000000000000 0000000000000001
set_bit(0, &value);
// 设置 value 的第2位为1, value = 0000000000000000 0000000000000101
set_bit(2, &value);
// 设置 value 的第0位为0, value = 0000000000000000 0000000000000100
clear_bit(0, &value);
// 将 value 的第0位取反,第0位为1则设为0,为0则设为1
change_bit(0, &value);