#define atomic_inc_return(v) atomic_add_return(1, (v)) static inline int atomic_add_return(int i, atomic_t *v) { unsigned long tmp; int result; smp_mb(); __asm__ __volatile__("@ atomic_add_return\n" "1: ldrex %0, [%3]\n" /*【1】独占方式加载v->counter到result*/ " ...
atomic_add(2, &v); /* v = v + 2 = 6(原子地) */ atomic_inc(&v); /* v = v + 1 = 7(原子地) */ // 将atomic_t转型为int,可用atomic_read() printk("%d\n", atomic_read(&v)); /* 打印7 */ 除了上面的原子自增atomic_inc()和原子自减atomic_dec(),还有一类原子操作:用原子...
void atomic_add(int i, atomic_t *v);/*原子变量增加 i*/ void atomic_sub(int i, atomic_t *v);/*原子变量减少 i*/ 4.原子变量自增、自减 void atomic_inc(atomic_t *v);/*原子变量增加1*/ void atomic_dec(atomic_t *v);/*原子变量减少1*/ 5.操作 int atomic_inc_and_test(atomic_t...
atomic_inc(atomic_t *v):将v的值原子地增加1。 atomic_dec(atomic_t *v):将v的值原子地减少1。 atomic_read(const atomic_t *v):原子地读取v的值。 atomic_set(atomic_t *v, int i):将v的值原子地设置为i。 简单的Linux原子操作示例 以下是一个简单的示例,演示如何在Linux中使用原子操作函数: c...
原子API 支持一个涵盖很多用例的富函数集。能够使用atomic_read读取原子变量中的内容,也能够使用atomic_add为一个变量加入指定值。最经常使用的操作是使用atomic_inc使变量递增。 也可用减号运算符,它的作用与相加和递增操作相反。 清单2. 演示了这些函数。
void atomic_dec(atomic_t *v); 该函数对原子类型的变量v原子地减1。 int atomic_dec_and_test(atomic_t *v); 该函数对原子类型的变量v原子地减1,并判断结果是否为0,如果为0,返回真,否则返回假。 int atomic_inc_and_test(atomic_t *v);
void atomic_add(int i, atomic_t* v); //原子变量v增加i; void atomic_sub(int i, atomic_t* v); void atomic_inc(atomic_t* v); //原子变量增加1; void atomic_dec(atomic_t* v); int atomic_inc_and_test(atomic_t* v); //先自增1,然后测试其值是否为0,若为0,则返回true,否则返回fa...
int atomic_add_return(int i, atomic_t *v);该函数对原子类型的变量v原子地增加i,并且返回指向v的指针。 int atomic_sub_return(int i, atomic_t *v);该函数从原子类型的变量v中减去i,并且返回指向v的指针。 int atomic_inc_return(atomic_t * v);该函数对原子类型的变量v原子地增加1并且返回指向v的...
Linux的源码中x86体系结构原子操作的定义文件为。 linux2.6/include/asm-i386/atomic.h 文件内定义了原子类型atomic_t,其仅有一个字段counter,用于保存32位的数据。 typedef struct{volatile int counter;}atomic_t; 其中原子操作函数atomic_inc完成自加原子操作。
Linux源码解析——atomic ①atomic_t typedef struct { volatile int counter; } atomic_t; 就是一个原子计数器 ②atomic_inc() 原子加1 ③atomic_set() 原子赋值