mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-09 11:16:47 +00:00
doc: 原子变量文档
This commit is contained in:
parent
6352836902
commit
aacb77e0c6
99
docs/kernel/core_api/atomic.md
Normal file
99
docs/kernel/core_api/atomic.md
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
# 原子变量
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
  DragonOS实现了原子变量,类型为atomic_t. 原子变量是基于具体体系结构的原子操作指令实现的。具体实现在`kernel/process/atomic.h`中。
|
||||||
|
|
||||||
|
## 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运算的变量
|
||||||
|
|
@ -9,6 +9,7 @@
|
|||||||
:caption: 内核实用函数库
|
:caption: 内核实用函数库
|
||||||
|
|
||||||
kernel_api
|
kernel_api
|
||||||
|
atomic
|
||||||
|
|
||||||
内存管理
|
内存管理
|
||||||
===================
|
===================
|
||||||
|
@ -24,7 +24,7 @@ typedef struct
|
|||||||
* @param ato 原子变量对象
|
* @param ato 原子变量对象
|
||||||
* @param val 要增加的值
|
* @param val 要增加的值
|
||||||
*/
|
*/
|
||||||
static inline void atomic_add(atomic_t *ato, long val)
|
inline void atomic_add(atomic_t *ato, long val)
|
||||||
{
|
{
|
||||||
asm volatile("lock addq %1, %0 \n\t"
|
asm volatile("lock addq %1, %0 \n\t"
|
||||||
: "=m"(ato->value)
|
: "=m"(ato->value)
|
||||||
@ -38,7 +38,7 @@ static inline void atomic_add(atomic_t *ato, long val)
|
|||||||
* @param ato 原子变量对象
|
* @param ato 原子变量对象
|
||||||
* @param val 要减少的值
|
* @param val 要减少的值
|
||||||
*/
|
*/
|
||||||
static inline void atomic_sub(atomic_t *ato, long val)
|
inline void atomic_sub(atomic_t *ato, long val)
|
||||||
{
|
{
|
||||||
asm volatile("lock subq %1, %0 \n\t"
|
asm volatile("lock subq %1, %0 \n\t"
|
||||||
: "=m"(ato->value)
|
: "=m"(ato->value)
|
||||||
@ -51,7 +51,7 @@ static inline void atomic_sub(atomic_t *ato, long val)
|
|||||||
*
|
*
|
||||||
* @param ato 原子变量对象
|
* @param ato 原子变量对象
|
||||||
*/
|
*/
|
||||||
static inline void atomic_inc(atomic_t *ato)
|
void atomic_inc(atomic_t *ato)
|
||||||
{
|
{
|
||||||
asm volatile("lock incq %0 \n\t"
|
asm volatile("lock incq %0 \n\t"
|
||||||
: "=m"(ato->value)
|
: "=m"(ato->value)
|
||||||
@ -64,7 +64,7 @@ static inline void atomic_inc(atomic_t *ato)
|
|||||||
*
|
*
|
||||||
* @param ato 原子变量对象
|
* @param ato 原子变量对象
|
||||||
*/
|
*/
|
||||||
static inline void atomic_dec(atomic_t *ato)
|
void atomic_dec(atomic_t *ato)
|
||||||
{
|
{
|
||||||
asm volatile("lock decq %0 \n\t"
|
asm volatile("lock decq %0 \n\t"
|
||||||
: "=m"(ato->value)
|
: "=m"(ato->value)
|
||||||
@ -77,7 +77,7 @@ static inline void atomic_dec(atomic_t *ato)
|
|||||||
*
|
*
|
||||||
* @param ato 原子变量对象
|
* @param ato 原子变量对象
|
||||||
*/
|
*/
|
||||||
static inline void atomic_set_mask(atomic_t *ato, long mask)
|
inline void atomic_set_mask(atomic_t *ato, long mask)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__("lock orq %1, %0 \n\t"
|
__asm__ __volatile__("lock orq %1, %0 \n\t"
|
||||||
: "=m"(ato->value)
|
: "=m"(ato->value)
|
||||||
@ -90,7 +90,7 @@ static inline void atomic_set_mask(atomic_t *ato, long mask)
|
|||||||
*
|
*
|
||||||
* @param ato 原子变量对象
|
* @param ato 原子变量对象
|
||||||
*/
|
*/
|
||||||
static inline void atomic_clear_mask(atomic_t *ato, long mask)
|
inline void atomic_clear_mask(atomic_t *ato, long mask)
|
||||||
{
|
{
|
||||||
__asm__ __volatile__("lock andq %1, %0 \n\t"
|
__asm__ __volatile__("lock andq %1, %0 \n\t"
|
||||||
: "=m"(ato->value)
|
: "=m"(ato->value)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user