Linux 内核同步机制 原子操作

一、原子操作

原子操作是一系列不可中断的操作的集合,它的执行过程是封闭的,不可打断的。在单处理系统中,能够在单条指令中完成的操作都可以认为是原子操作。在对称多处理器结构中,即使能在单条指令中完成的操作也有可能被打断。原子性不可能由软件单独保证,必须有硬件的支持,因此是和平台相关的,而且通常使用汇编语言实现。原子操作保护的资源通常被定义成原子型整数(atomic_t)类型:

typedef struct { volatile int counter;} atomic_t;

volatile 修饰符告诉编译器不要对该类型的数据做优化处理。
原子操作包含整数型和比特型,见下表。

类型函数原型说明
atomic_read(atomic_t* v);原子读操作
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
int set_bit(int nr, void* addr);对给定地址 addr 的第 nr bit 进行置位
int clear_bit(int nr, void* addr);对给定地址 addr 的第 nr bit 进行清位
int test_bit(int nr, void* addr);检测给定地址 addr 的第 nr bit 的值
int change_bit(int nr, void* addr);使地址 addr 的第 nr bit 发生跳转(0变为1,1变为0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值