Browse Source

doc: 原子变量文档

fslongjin 2 years ago
parent
commit
aacb77e0c6
3 changed files with 106 additions and 6 deletions
  1. 99 0
      docs/kernel/core_api/atomic.md
  2. 1 0
      docs/kernel/core_api/index.rst
  3. 6 6
      kernel/process/atomic.h

+ 99 - 0
docs/kernel/core_api/atomic.md

@@ -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运算的变量
+

+ 1 - 0
docs/kernel/core_api/index.rst

@@ -9,6 +9,7 @@
    :caption: 内核实用函数库
 
    kernel_api
+   atomic
 
 内存管理
 ===================

+ 6 - 6
kernel/process/atomic.h

@@ -24,7 +24,7 @@ typedef struct
  * @param ato 原子变量对象
  * @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"
                  : "=m"(ato->value)
@@ -38,7 +38,7 @@ static inline void atomic_add(atomic_t *ato, long val)
  * @param ato 原子变量对象
  * @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"
                  : "=m"(ato->value)
@@ -51,7 +51,7 @@ static inline void atomic_sub(atomic_t *ato, long val)
  *
  * @param ato 原子变量对象
  */
-static inline void atomic_inc(atomic_t *ato)
+void atomic_inc(atomic_t *ato)
 {
     asm volatile("lock incq %0   \n\t"
                  : "=m"(ato->value)
@@ -64,7 +64,7 @@ static inline void atomic_inc(atomic_t *ato)
  *
  * @param ato 原子变量对象
  */
-static inline void atomic_dec(atomic_t *ato)
+void atomic_dec(atomic_t *ato)
 {
     asm volatile("lock decq %0 \n\t"
                  : "=m"(ato->value)
@@ -77,7 +77,7 @@ static inline void atomic_dec(atomic_t *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"
                          : "=m"(ato->value)
@@ -90,7 +90,7 @@ static inline void atomic_set_mask(atomic_t *ato, long mask)
  *
  * @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"
                          : "=m"(ato->value)