# Atomic Variables — DragonOS dev 文档

备注

AI Translation Notice

This document was automatically translated by `Qwen/Qwen3-8B` model, for reference only.

- Source document: kernel/core_api/atomic.md

- Translation time: 2025-05-19 01:41:25

- Translation model: `Qwen/Qwen3-8B`

Please report issues via Community Channel

# Atomic Variables

## Introduction

DragonOS implements atomic variables of type `atomic_t`. Atomic variables are implemented using architecture-specific atomic operation instructions. The specific implementation is located in `kernel/common/atomic.h`.

## API

Note that all the following APIs are atomic operations.

### `inline void atomic_add(atomic_t *ato, long val)`

#### Description

Atomically adds a specified value to the atomic variable.

#### Parameters

ato

The atomic variable object.

val

The value to be added to the variable.

### `inline void atomic_sub(atomic_t *ato, long val)`

#### Description

Atomically subtracts a specified value from the atomic variable.

#### Parameters

ato

The atomic variable object.

val

The value to be subtracted from the variable.

### `void atomic_inc(atomic_t *ato)`

#### Description

Atomically increments the atomic variable by 1.

#### Parameters

ato

The atomic variable object.

### `void atomic_dec(atomic_t *ato)`

#### Description

Atomically decrements the atomic variable by 1.

#### Parameters

ato

The atomic variable object.

### `inline void atomic_set_mask(atomic_t *ato, long mask)`

#### Description

Performs a bitwise OR operation between the atomic variable and the mask variable.

#### Parameters

ato

The atomic variable object.

mask

The variable used for the OR operation with the atomic variable.

### `inline void atomic_clear_mask(atomic_t *ato, long mask)`

#### Description

Performs a bitwise AND operation between the atomic variable and the mask variable.

#### Parameters

ato

The atomic variable object.

mask

The variable used for the AND operation with the atomic variable.

Other Versions v: V0.4.0

Tags
  V0.1.0
  V0.1.1
  V0.1.10
  V0.1.2
  V0.1.3
  V0.1.4
  V0.1.5
  V0.1.6
  V0.1.7
  V0.1.8
  V0.1.9
  V0.2.0
  V0.3.0
  V0.4.0

Branches
  master