/*设置原子变量的值*/ atomic_t v = ATOMIC_INIT(0); /* 定义原子变量v并初始化为0 */ void atomic_set(atomic_t *v, int i); /* 设置原子变量的值为i */ /*获取原子变量的值*/ atomic_read(atomic_t *v); /* 返回原子变量的值*/ /*原子变量的加减*/ void atomic_add(int i...
ATOMIC_INIT(int i): 定义原子变量时,赋值 i atomic_tmy_atomic=ATOMIC_INIT(0);//定义了一个初始...
atomic_tcnt =ATOMIC_INIT(0); atomic64_tv =ATOMIC64_INIT(v0); 赋值操作 读操作 原型说明返回值 int atomic_read(const atomic_t *v)原子变量v的数值 linux还提供了带条件的读取方式,即如果条件不满足,就一直读取: #defineatomic_cond_read_acquire(v, c) smp_cond_load_acquire(&(v)->counter, (c...
atomic_t u = ATOMIC_INIT(0); atomic_set(&v, 4); /* v = 4(原子地) */ 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_t v = ATOMIC_INIT(0); //定义原子变量,并将其初始化为0 1.2 获取元原子变量的值 atomic_read(atomic_t *v); //返回原子变量的值 这是一个宏定义:#define atomic_read(v) (*(volatile int)&(v)->counter) 1.3 原子变量加减 void atomic_add(int i,atomic_t *v); //原子变量增加i ...
typedef struct { volatile int counter; } atomic_t; 原子类型其实是int类型,只是禁止寄存器对其暂存。[cpp] view plaincopyprint?#define ATOMIC_INIT(i) { (i) } 原子类型的初始化。32位x86平台下atomic API在arch/x86/include/asm/atomic_32.h中实现。
staticinlinevoidatomic_set(atomic_t *v,inti);//设置原子的值atomic_t = ATOMIC_INIT(0);//定义原子变量并且初始化为0 2. 获取原子变量的值 #defineatomic_read(v) ((v)->counter)//返回原子变量的值 (*(volatile int *)&(v)->counter) ...
} atomic_t; 原子类型其实是int类型,只是禁止寄存器对其暂存。 #define ATOMIC_INIT(i) { (i) } 原子类型的初始化。32位x86平台下atomic API在arch/x86/include/asm/atomic_32.h中实现。 staticinlineintatomic_read(constatomic_t *v) { returnv->counter; ...
Linux提供了很多操作原子变量的API。以arch/arm/include/asm/atomic.h为例。 #defineATOMIC_INIT(i){(i)}---声明一个原子变量并初始化为i。 #defineatomic_read(v)ACCESS_ONCE((v)->counter)---读取原子变量的值。 #defineatomic_set(v,i)(((v)->counter)=(i))---设置变量v的值...
void atomic_set(atomic_t *v, int i);/*设置原子变量的值为 i*/ atomic_t v = ATOMIC_INIT(0);/*定义原子变量 v 并初始化为 0*/ 2.获取原子变量的值 atomic_read(atomic_t *v);/*返回原子变量的值 */ 3.原子变量加、减 void atomic_add(int i, atomic_t *v);/*原子变量增加 i*/ ...