原子操作通常针对int或bit类型的数据,但是Linux并不能直接对int进行原子操作,而只能通过atomic_t的数据结构来进行。目前了解到的原因有两个。 定义于#include<asm/atomic.h> 分为 定义,获取,加减,测试,返回。 void atomic_set(atomic_t *v,int i); //设置原子变量v的值为i atomic_t v = ATOMIC_INIT(0)...
atomic_set(atomic_t * v, int i); 该函数设置原子类型的变量v的值为i。 void atomic_add(int i, atomic_t *v); 该函数给原子类型的变量v增加值i。 atomic_sub(int i, atomic_t *v); 该函数从原子类型的变量v中减去i。 int atomic_sub_and_test(int i, atomic_t *v); 该函数从原子类型的变...
atomic_t *fclone_ref = (atomic_t *) (child + 1); /*设置克隆标志*/ skb->fclone = SKB_FCLONE_ORIG; atomic_set(fclone_ref, 1);/*克隆引用标志为1*/ child->fclone = SKB_FCLONE_UNAVAILABLE; } out: return skb; nodata: kmem_cache_free(cache, skb); skb = NULL; goto out; } 调用...
int atomic_add_return(int i, atomic_t *v); int atomic_sub_return(int i, atomic_t *v); int atomic_inc_return(atomic_t *v); int atomic_sub_return(atomic_t *v); 位原子操作: void set_bit(nr,void *addr);//将addr地址的nr位 置为1 void clear_bit(nr,void *addr);//将addr地址...
int atomic_dec_return(atomic_t* v); 二.位原子操作 定义于#include<asm/bitops.h> 分为 设置,清除,改变,测试 void set_bit(int nr, volatile void* addr); //设置地址addr的第nr位,所谓设置位,就是把位写为1; void clear_bit(int nr, volatile void* addr); //清除地址addr的第nr位,所谓清除位...
local_irq_save(flags); __i = atomic_read(v); atomic_set(v, i + __i); local_irq_restore(flags); return i + __i; #endif } atomic_add_return 不仅执行加操作,而且把相加的结果返回。它是通过xadd这一指令实现的。[cpp] view plaincopyprint? static inline int atomic_sub_return(...
void atomic_set(atomic_t *v,int i); //设置原子变量的的值为i atomic_t v = ATOMIC_INIT(0); //定义原子变量,并将其初始化为0 1.2 获取元原子变量的值 atomic_read(atomic_t *v); //返回原子变量的值 这是一个宏定义:#define atomic_read(v) (*(volatile int)&(v)->counter) ...
1.atomic_read与atomic_set函数是原子变量的操作,就是原子读和原子设置的作用.2.原子操作,就是执行操作的时候,其数值不会被其它线程或者中断所影响 3.原子操作是linux内核中一种同步的方式
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*/ ...
初始化atomic_t结构体,可使用函数atomic_set(),传入需要赋值的值value。函数atomic_set()将value赋给atomic_t的counter成员变量。另外,可通过atomic_cmpxchg()函数设置atomic_t的counter成员变量为给定的值i,并返回原值。这些操作通过编译器提供的特殊指令实现,如整型变量的原子操作指令,确保了多线程或...