Linux 内核中的原子操作

6/18/2022 Linux 内核

该 API 的用法与 golang atomic 包类似

# 定义原子变量

变量类型 atomic_t

static atomic_t atomic_var = ATOMIC_INIT(0);
1

# 常用API

# 设置

atomic_set(&atomic_var, 1);
1

# 读取

int val = atomic_read(&atomic_var);
1

#

atomic_add(1, &atomic_var);
1

返回设置后的新值

atomic_add_return(1, &atomic_var);
1

返回一个bool值,含义为新值是否为0

int new_value_is_zero = atomic_dec_and_test(&atomic_var);
1

返回一个bool值,含义为新值是否为负数

int new_value_is_negative = atomic_add_negative(1, &atomic_var);
1

#

atomic_sub(1, &atomic_var);
1
atomic_sub_return(1, &atomic_var);
1
bool new_value_is_zero = atomic_sub_and_test(&atomic_var);
1

# 自增

atomic_inc(&atomic_var);
1
int new_value = atomic_inc_return(&atomic_var);
1
bool new_value_is_zero = atomic_inc_and_test(&atomic_var);
1

# 自减

atomic_dec(&atomic_var);
1
int new_value = atomic_dec_return(&atomic_var);
1
bool new_value_is_zero = atomic_dec_and_test(&atomic_var);
1

# 其他API

https://www.kernel.org/doc/html/v4.12/core-api/atomic_ops.html

Last Updated: 2/11/2023, 2:30:05 AM