Linux 内核中的原子操作
Alex 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