2022-07-27 04:11:29 +00:00
|
|
|
|
# 原子变量
|
|
|
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
|
|
2022-07-31 06:17:26 +00:00
|
|
|
|
  DragonOS实现了原子变量,类型为atomic_t. 原子变量是基于具体体系结构的原子操作指令实现的。具体实现在`kernel/common/atomic.h`中。
|
2022-07-27 04:11:29 +00:00
|
|
|
|
|
|
|
|
|
|
## API
|
|
|
|
|
|
|
|
|
|
|
|
   请注意,以下API均为原子操作。
|
|
|
|
|
|
|
|
|
|
|
|
### `inline void atomic_add(atomic_t *ato, long val)`
|
|
|
|
|
|
|
|
|
|
|
|
#### 描述
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量增加指定值
|
|
|
|
|
|
|
|
|
|
|
|
#### 参数
|
|
|
|
|
|
|
|
|
|
|
|
**ato**
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量对象
|
|
|
|
|
|
|
|
|
|
|
|
**val**
|
|
|
|
|
|
|
|
|
|
|
|
  变量要增加的值
|
|
|
|
|
|
|
|
|
|
|
|
### `inline void atomic_sub(atomic_t *ato, long val)`
|
|
|
|
|
|
|
|
|
|
|
|
#### 描述
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量减去指定值
|
|
|
|
|
|
|
|
|
|
|
|
#### 参数
|
|
|
|
|
|
|
|
|
|
|
|
**ato**
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量对象
|
|
|
|
|
|
|
|
|
|
|
|
**val**
|
|
|
|
|
|
|
|
|
|
|
|
  变量要被减去的值
|
|
|
|
|
|
|
|
|
|
|
|
### `void atomic_inc(atomic_t *ato)`
|
|
|
|
|
|
|
|
|
|
|
|
#### 描述
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量自增1
|
|
|
|
|
|
|
|
|
|
|
|
#### 参数
|
|
|
|
|
|
|
|
|
|
|
|
**ato**
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量对象
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### `void atomic_dec(atomic_t *ato)`
|
|
|
|
|
|
|
|
|
|
|
|
#### 描述
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量自减1
|
|
|
|
|
|
|
|
|
|
|
|
#### 参数
|
|
|
|
|
|
|
|
|
|
|
|
**ato**
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量对象
|
|
|
|
|
|
|
|
|
|
|
|
### `inline void atomic_set_mask(atomic_t *ato, long mask)`
|
|
|
|
|
|
|
|
|
|
|
|
#### 描述
|
|
|
|
|
|
|
|
|
|
|
|
  将原子变量的值与mask变量进行or运算
|
|
|
|
|
|
|
|
|
|
|
|
#### 参数
|
|
|
|
|
|
|
|
|
|
|
|
**ato**
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量对象
|
|
|
|
|
|
|
|
|
|
|
|
**mask**
|
|
|
|
|
|
|
|
|
|
|
|
  与原子变量进行or运算的变量
|
|
|
|
|
|
|
|
|
|
|
|
### `inline void atomic_clear_mask(atomic_t *ato, long mask)`
|
|
|
|
|
|
|
|
|
|
|
|
#### 描述
|
|
|
|
|
|
|
|
|
|
|
|
  将原子变量的值与mask变量进行and运算
|
|
|
|
|
|
|
|
|
|
|
|
#### 参数
|
|
|
|
|
|
|
|
|
|
|
|
**ato**
|
|
|
|
|
|
|
|
|
|
|
|
  原子变量对象
|
|
|
|
|
|
|
|
|
|
|
|
**mask**
|
|
|
|
|
|
|
|
|
|
|
|
  与原子变量进行and运算的变量
|
|
|
|
|
|
|